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
BEGIN
sebelum deklarasi variabel - Anda memiliki
DECLARE
yang asing -- Anda hanya akan menggunakannya jika Anda mendeklarasikan blok PL/SQL yang tidak melibatkanCREATE
. - Anda kehilangan titik koma setelah
RETURN
pernyataan. - 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
OUT
parameter. - Anda kehilangan
THEN
setelahIF
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;