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
BEGIN
vóó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
RETURN
verklaringen. - 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
THEN
na 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;