Stored procedures 基本存储过程(更新列值)
我有一个基本表,如下所示:Stored procedures 基本存储过程(更新列值),stored-procedures,oracle10g,Stored Procedures,Oracle10g,我有一个基本表,如下所示: SQL> desc comments Name Null? Type --------------------------------------- COMMENT_ID NOT NULL NUMBER POST_ID NOT NULL NUMBER USER_ID NOT NULL NUMBER MESSAGE NOT NU
SQL> desc comments
Name Null? Type
---------------------------------------
COMMENT_ID NOT NULL NUMBER
POST_ID NOT NULL NUMBER
USER_ID NOT NULL NUMBER
MESSAGE NOT NULL VARCHAR2(2500)
MESSAGE_TIME NOT NULL TIMESTAMP(6)
UPVOTES NOT NULL NUMBER
我想做的是调用一个存储过程,以增加UPVOUTS。这似乎是最有意义的,因为我不想传递除了评论id和帖子id之外的任何东西
我想我应该做这样的事情(请原谅语法,我很久没有弄乱存储过程了)
但我只是不知道这里丢失的那块。我试着看了看
http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_6009.htm
网站上还有其他一些地方,但我只是错过了一些东西
在正确的方向上提供任何帮助都是非常好的是否有任何原因这对您不起作用:
CREATE OR REPLACE procedure proc_upvote_comment (comment_id NUMBER , post_id NUMBER)
AS
BEGIN
UPDATE COMMENTS
SET UPVOTES = UPVOTES + 1
WHERE COMMENTS.COMMENT_ID = proc_upvote_comment.comment_id
AND COMMENTS.POST_ID = proc_upvote_comment.post_id;
END;
请记住,SQL使用集合;) 这对您不起作用有什么原因吗:
CREATE OR REPLACE procedure proc_upvote_comment (comment_id NUMBER , post_id NUMBER)
AS
BEGIN
UPDATE COMMENTS
SET UPVOTES = UPVOTES + 1
WHERE COMMENTS.COMMENT_ID = proc_upvote_comment.comment_id
AND COMMENTS.POST_ID = proc_upvote_comment.post_id;
END;
请记住,SQL使用集合;) 你可能只是想
CREATE OR REPLACE procedure proc_upvote_comment (p_comment_id NUMBER , p_post_id NUMBER)
AS
BEGIN
UPDATE comments
SET upvotes = upvotes + 1
WHERE comment_id = p_comment_id
AND post_id = p_post_id;
END;
/
通常,您希望有一个命名约定来区分参数和列名。我更喜欢对参数使用p_
前缀,对局部变量使用l_
前缀,但还有其他约定。如果不这样做,并且对列和参数使用相同的名称,SQL语句将首先使用列的名称,然后使用参数的名称解析标识符。在存储过程的名称前加前缀以提供范围解析是可行的,但这相当麻烦。您可能只是想
CREATE OR REPLACE procedure proc_upvote_comment (p_comment_id NUMBER , p_post_id NUMBER)
AS
BEGIN
UPDATE comments
SET upvotes = upvotes + 1
WHERE comment_id = p_comment_id
AND post_id = p_post_id;
END;
/
通常,您希望有一个命名约定来区分参数和列名。我更喜欢对参数使用
p_
前缀,对局部变量使用l_
前缀,但还有其他约定。如果不这样做,并且对列和参数使用相同的名称,SQL语句将首先使用列的名称,然后使用参数的名称解析标识符。诉诸于在存储过程的名称前加前缀以提供范围解析是可行的,但这相当麻烦。每次这样做时,我都会收到错误PLS-00103:在预期以下情况之一时遇到符号“BEGIN”:;使用外部确定性并行_启用的流水线将authid作为集群顺序。符号“是”被替换为“开始”continue@PSU_Kardi-在开始之前,您需要一个AS
(或者IS
,两者都可以工作)每次我这样做时,我都会收到错误PLS-00103:在预期以下情况之一时遇到符号“BEGIN”:;使用外部确定性并行_启用的流水线将authid作为集群顺序。符号“是”被替换为“开始”continue@PSU_Kardi-在开始之前,您需要一个AS
(或者IS
,两者都可以)