Het skelet van een opgeslagen procedure-aangifte is
CREATE OR REPLACE PROCEDURE procedure_name( <<parameters>> )
AS
<<variable declarations>>
BEGIN
<<code>>
END procedure_name;
In de code die je hebt gepost,
- Je zet de
BEGINvóór de variabele declaraties - Je hebt een externe
DECLARE-- je zou dat alleen gebruiken als je een PL/SQL-blok declareert zonder eenCREATE. - Je mist puntkomma's na je
RETURNverklaringen. - Een procedure kan geen waarde retourneren. Als u een 1 of een 0 wilt retourneren, wilt u waarschijnlijk een functie, geen procedure. Als u een procedure nodig heeft, kunt u een
OUT. declareren parameter. - Je mist de
THENna deIF
Het klinkt alsof je iets wilt als
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;
Merk op dat u in het algemeen beter af bent met een soort naamgevingsconventie om ervoor te zorgen dat parameters en lokale variabelen de naam van een kolom niet delen. Proberen te achterhalen of LISTNAME is een parameter of een kolomnaam en wat het verschil is tussen LIST_NAME en LISTNAME Dit zal toekomstige programmeurs over het algemeen verwarren. Persoonlijk gebruik ik een p_ prefix voor parameters en een l_ voorvoegsel voor lokale variabelen. Ik zou ook aanraden om verankerde typen te gebruiken-- lists_master.list_name%type als dat is wat wordt doorgegeven in
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;