Szkielet deklaracji procedury składowanej to
CREATE OR REPLACE PROCEDURE procedure_name( <<parameters>> )
AS
<<variable declarations>>
BEGIN
<<code>>
END procedure_name;
W opublikowanym przez Ciebie kodzie
- Wstawiasz
BEGIN
przed deklaracjami zmiennych - Masz nieistotne
DECLARE
-- użyjesz tego tylko wtedy, gdy deklarujesz blok PL/SQL, który nie obejmujeCREATE
. - Brakuje średników po
RETURN
oświadczenia. - Procedura nie może zwrócić wartości. Jeśli chcesz zwrócić 1 lub 0, prawdopodobnie potrzebujesz funkcji, a nie procedury. Jeśli potrzebujesz procedury, możesz zadeklarować
OUT
parametr. - Brakuje elementu
THEN
poIF
Wygląda na to, że chcesz czegoś takiego
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;
Zwróć uwagę, że ogólnie rzecz biorąc, lepiej jest użyć pewnego rodzaju konwencji nazewnictwa, aby zapewnić, że parametry i zmienne lokalne nie będą współdzielić nazwy kolumny. Próbuję dowiedzieć się, czy LISTNAME
to parametr lub nazwa kolumny i jaka jest różnica między LIST_NAME
i LISTNAME
To generalnie zdezorientuje przyszłych programistów. Osobiście używam p_
przedrostek dla parametrów i l_
prefiks dla zmiennych lokalnych. Sugerowałbym również użycie typów zakotwiczonych -- lists_master.list_name%type
jeśli to właśnie jest przekazywane
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;