存储过程声明的框架是
CREATE OR REPLACE PROCEDURE procedure_name( <> )
AS
<>
BEGIN
<>
END procedure_name;
在您发布的代码中,
您在变量声明之前放置 BEGIN
你有一个无关的 DECLARE - 如果你声明一个不涉及 CREATE 的PL / SQL块,你只会使用它 .
在 RETURN 语句后缺少分号 .
过程无法返回值 . 如果要返回1或0,您可能需要一个函数,而不是一个过程 . 如果需要过程,可以声明 OUT 参数 .
在 IF 之后您缺少 THEN
这听起来像你想要的东西
CREATE OR REPLACE FUNCTION LIST_ACTIONS_CHECK_ADD
(
LISTNAME IN VARCHAR2
)
RETURN NUMBER
AS
CNT NUMBER;
BEGIN
SELECT COUNT(LIST_NAME)
INTO CNT
FROM LISTS_MASTER
WHERE LIST_NAME = LISTNAME;
IF (CNT > 0)
THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END LIST_ACTIONS_CHECK_ADD;
请注意,作为一般事项,通常最好使用某种命名约定来确保参数和局部变量不共享列的名称 . 试图弄清楚 LISTNAME 是一个参数还是一个列名, LIST_NAME 和 LISTNAME 之间的区别通常会让未来的程序员感到困惑 . 就个人而言,我使用 p_ 前缀作为参数,并使用 l_ 前缀作为局部变量 . 我还建议使用锚定类型 - lists_master.list_name%type ,如果这是传入的内容
CREATE OR REPLACE FUNCTION LIST_ACTIONS_CHECK_ADD
(
P_LIST_NAME IN lists_master.list_name%type
)
RETURN NUMBER
AS
L_CNT NUMBER;
BEGIN
SELECT COUNT(LIST_NAME)
INTO L_CNT
FROM LISTS_MASTER
WHERE LIST_NAME = P_LIST_NAME;
IF (L_CNT > 0)
THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END LIST_ACTIONS_CHECK_ADD;