एक संग्रहीत कार्यविधि घोषणा का कंकाल है
CREATE OR REPLACE PROCEDURE procedure_name( <<parameters>> )
AS
<<variable declarations>>
BEGIN
<<code>>
END procedure_name;
आपके द्वारा पोस्ट किए गए कोड में,
- आपने
BEGIN
डाला परिवर्तनीय घोषणाओं से पहले - आपके पास एक बाहरी
DECLARE
है -- आप इसका उपयोग केवल तभी करेंगे जब आप एक PL/SQL ब्लॉक घोषित कर रहे हैं जिसमेंCREATE
शामिल नहीं है । - आपके
RETURN
. के बाद आपके पास अर्धविराम नहीं हैं बयान। - एक प्रक्रिया एक मान नहीं लौटा सकती। यदि आप या तो 1 या 0 वापस करना चाहते हैं, तो आप शायद एक फ़ंक्शन चाहते हैं, प्रक्रिया नहीं। यदि आपको किसी प्रक्रिया की आवश्यकता है, तो आप एक
OUT
घोषित कर सकते हैं पैरामीटर। - आपमें
THEN
की कमी हैIF
. के बाद
ऐसा लगता है कि आप कुछ ऐसा चाहते हैं
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;
ध्यान दें कि एक सामान्य मामले के रूप में, यह सुनिश्चित करने के लिए कि पैरामीटर और स्थानीय चर एक कॉलम का नाम साझा नहीं करते हैं, आप आमतौर पर किसी प्रकार के नामकरण सम्मेलन का उपयोग करना बेहतर समझते हैं। यह पता लगाने की कोशिश की जा रही है कि LISTNAME
एक पैरामीटर या कॉलम नाम है और LIST_NAME
के बीच क्या अंतर है और LISTNAME
आम तौर पर भविष्य के प्रोग्रामर को भ्रमित करेगा। व्यक्तिगत रूप से, मैं एक p_
का उपयोग करता हूं पैरामीटर के लिए उपसर्ग और एक l_
स्थानीय चर के लिए उपसर्ग। मैं एंकर प्रकारों का उपयोग करने का भी सुझाव दूंगा-- lists_master.list_name%type
अगर यही पारित किया जा रहा है
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;