Kerangka dari deklarasi prosedur tersimpan adalah
CREATE OR REPLACE PROCEDURE procedure_name( <<parameters>> )
AS
<<variable declarations>>
BEGIN
<<code>>
END procedure_name;
Dalam kode yang Anda posting,
- Anda memasukkan
BEGINsebelum deklarasi variabel - Anda memiliki
DECLAREyang asing -- Anda hanya akan menggunakannya jika Anda mendeklarasikan blok PL/SQL yang tidak melibatkanCREATE. - Anda kehilangan titik koma setelah
RETURNpernyataan. - Prosedur tidak dapat mengembalikan nilai. Jika Anda ingin mengembalikan 1 atau 0, Anda mungkin menginginkan fungsi, bukan prosedur. Jika Anda memerlukan prosedur, Anda dapat mendeklarasikan
OUTparameter. - Anda kehilangan
THENsetelahIF
Sepertinya Anda menginginkan sesuatu seperti
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;
Perhatikan bahwa sebagai masalah umum, Anda biasanya lebih baik menggunakan semacam konvensi penamaan untuk memastikan bahwa parameter dan variabel lokal tidak berbagi nama kolom. Mencoba mencari tahu apakah LISTNAME adalah parameter atau nama kolom dan apa perbedaan antara LIST_NAME dan LISTNAME umumnya akan membingungkan programmer masa depan. Secara pribadi, saya menggunakan p_ awalan untuk parameter dan l_ awalan untuk variabel lokal. Saya juga menyarankan untuk menggunakan tipe berlabuh-- lists_master.list_name%type jika itu yang sedang diteruskan di
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;