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
BEGINprima delle dichiarazioni delle variabili - Hai un
DECLAREestraneo -- lo useresti solo se stai dichiarando un blocco PL/SQL che non implica unCREATE. - Ti mancano i punti e virgola dopo il tuo
RETURNdichiarazioni. - 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
OUTparametro. - Ti manca il
THENdopo 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;