Kostra deklarace uložené procedury je
CREATE OR REPLACE PROCEDURE procedure_name( <<parameters>> )
AS
<<variable declarations>>
BEGIN
<<code>>
END procedure_name;
V kódu, který jste zveřejnili,
- Zadáte
BEGIN
před deklaracemi proměnných - Máte nadbytečné
DECLARE
-- to byste použili pouze v případě, že deklarujete blok PL/SQL, který nezahrnujeCREATE
. - Za
RETURN
vám chybí středníky prohlášení. - Procedura nemůže vrátit hodnotu. Pokud chcete vrátit buď 1 nebo 0, pravděpodobně chcete funkci, ne proceduru. Pokud potřebujete proceduru, můžete deklarovat
OUT
parametr. - Chybí vám
THEN
zaIF
Zní to, jako byste chtěli něco jako
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;
Všimněte si, že obecně je lepší použít nějakou konvenci pojmenování, abyste zajistili, že parametry a lokální proměnné nebudou sdílet název sloupce. Snažím se zjistit, zda LISTNAME
je parametr nebo název sloupce a jaký je rozdíl mezi LIST_NAME
a LISTNAME
to bude obecně matoucí budoucí programátory. Osobně používám p_
prefix pro parametry a l_
prefix pro lokální proměnné. Také bych doporučil používat ukotvené typy -- lists_master.list_name%type
pokud je to to, co se předává
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;