Lo scheletro di una dichiarazione di stored procedure è
CREATE OR REPLACE PROCEDURE procedure_name( <<parameters>> )
AS
<<variable declarations>>
BEGIN
<<code>>
END procedure_name;
Nel codice che hai pubblicato,
- Metti
BEGIN
prima delle dichiarazioni delle variabili - Hai un
DECLARE
estraneo -- lo useresti solo se stai dichiarando un blocco PL/SQL che non implica unCREATE
. - Ti mancano i punti e virgola dopo il tuo
RETURN
dichiarazioni. - Una procedura non può restituire un valore. Se vuoi restituire un 1 o uno 0, probabilmente vuoi una funzione, non una procedura. Se hai bisogno di una procedura, puoi dichiarare un
OUT
parametro. - Ti manca il
THEN
dopo ilIF
Sembra che tu voglia qualcosa come
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;
Si noti che in generale, è generalmente meglio utilizzare una sorta di convenzione di denominazione per garantire che i parametri e le variabili locali non condividano il nome di una colonna. Sto cercando di capire se LISTNAME
è un parametro o il nome di una colonna e qual è la differenza tra LIST_NAME
e LISTNAME
è generalmente confonderà i futuri programmatori. Personalmente, utilizzo un p_
prefisso per i parametri e un l_
prefisso per le variabili locali. Suggerirei anche di utilizzare tipi ancorati:lists_master.list_name%type
se questo è ciò che viene passato
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;