Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle पैकेज बॉडी बनाने में त्रुटियाँ

10/38    PLS-00201: 'ID' must be declared

आप स्थानीय चर ID . में डेटा का चयन कर रहे हैं जिसे घोषित नहीं किया गया है। यदि आप एक स्थानीय चर घोषित करना चाहते हैं, तो आप ऐसा AS . के बीच घोषणा अनुभाग में करेंगे और BEGIN

   PROCEDURE create_emp(p_last_name IN employees.last_name%type, 
                        p_first_name IN    employees.first_name%type, 
                        p_email IN employees.email%type, 
                        p_hire_date IN  employees.hire_date%type, 
                        p_job_id IN employees.job_id%type) 
   AS
     id integer;
   BEGIN
     SELECT emp_sequence.NEXTVAL INTO id FROM dual;

यदि आप ऐसा करने जा रहे हैं, तो आप स्थानीय चर id . का उपयोग करना चाहेंगे आपके INSERT . में कॉल करने के बजाय emp_sequence.nextval सीधे। व्यक्तिगत रूप से, हालांकि, मुझे स्थानीय चर से छुटकारा मिल जाएगा, प्रारंभिक SELECT . से छुटकारा पाएं , और बस emp_sequence.nextval . बनाएं अपने INSERT . में कॉल करें बयान।

11/17    PL/SQL: ORA-00913: too many values

आप इसे कैसे भी करें, इसके बावजूद, आपको अपने INSERT में स्तंभों की संख्या की आवश्यकता होगी VALUES . की संख्या से मिलान करने के लिए आप निर्दिष्ट करें।

   PROCEDURE create_emp(p_last_name IN employees.last_name%type, 
                        p_first_name IN    employees.first_name%type, 
                        p_email IN employees.email%type, 
                        p_hire_date IN  employees.hire_date%type, 
                        p_job_id IN employees.job_id%type) 
   AS
     id integer;
   BEGIN
     SELECT emp_sequence.NEXTVAL INTO id FROM dual;
     INSERT INTO employees(employee_id, last_name, first_name, email, hire_date, job_id)
       VALUES (id, p_last_name, p_first_name, p_email, p_hire_date, p_job_id);
  END create_emp;

या यदि आप अनुक्रम को सीधे कॉल करना चाहते हैं

   PROCEDURE create_emp(p_last_name IN employees.last_name%type, 
                        p_first_name IN    employees.first_name%type, 
                        p_email IN employees.email%type, 
                        p_hire_date IN  employees.hire_date%type, 
                        p_job_id IN employees.job_id%type) 
   AS
   BEGIN
     INSERT INTO employees(employee_id, last_name, first_name, email, hire_date, job_id)
       VALUES ( emp_sequence.NEXTVAL, p_last_name, p_first_name, p_email, p_hire_date, p_job_id);
  END create_emp;

इसी तरह, आपकी अगली त्रुटि के लिए, आपके द्वारा लाए जाने वाले चरों की संख्या आपके द्वारा चुने जा रहे स्तंभों की संख्या से मेल खाना चाहिए

51/5     PL/SQL: ORA-00947: insufficient values

अपने read_emp में, आप 7 चीज़ों का चयन कर रहे हैं और उन्हें 6 चरों में डालने का प्रयास कर रहे हैं। यह मानते हुए कि आप employee_id को वापस नहीं करना चाहते हैं , इसे चुनने से परेशान न हों।

   PROCEDURE read_emp(p_employee_id IN employees.employee_id%type, 
                      p_last_name OUT  employees.last_name%type, 
                      p_first_name OUT employees.first_name%type, 
                      p_email OUT  employees.email%type, 
                      p_hire_date OUT  employees.hire_date%type, 
                      p_job_id OUT  employees.job_id%type, 
                      p_salary OUT employees.salary%type) 
   AS
   BEGIN
     SELECT last_name, first_name, email, hire_date, job_id, salary
     INTO  p_last_name, p_first_name, p_email, p_hire_date, p_job_id, p_salary
     FROM EMPLOYEES
     WHERE employee_id = p_employee_id;
   END read_emp;

जबकि आप एक read_emp लिख सकते हैं इस तरह की प्रक्रिया, आमतौर पर एक ऐसा फ़ंक्शन बनाने के लिए अधिक समझ में आता है जो employees%rowtype देता है इसके बजाय रिकॉर्ड करें।

आपके अपवाद खंड हटा दिए जाने चाहिए। सबसे अच्छा, वे त्रुटि स्टैक को त्याग रहे हैं जो एक व्यक्ति को बताएगा कि क्या विफल हुआ और कहां। कम से कम, वे त्रुटियों को छिपा रहे हैं (आपको यह कभी नहीं मानना ​​चाहिए कि कोई भी कभी भी कुछ भी देखेगा जिसे आप dbms_output पर लिखते हैं। ) और कॉलिंग कोड को यह विश्वास दिलाना कि कुछ ऑपरेशन सफल नहीं हुए तो सफल हो गए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 19 कॉलम को घटाकर 5 कॉलम करें

  2. Oracle SQL पदानुक्रमित क्वेरी:पदानुक्रम को समतल करें और एकत्रीकरण करें

  3. कोई बयान पार्स नहीं किया गया और गलत संख्या या तर्कों के प्रकार - cfstoredproc

  4. जावा में कनेक्शन पूलिंग कैसे करें?

  5. जावा में "जेडीबीसी प्रकार के लिए कोई बोली मानचित्रण नहीं:-1" त्रुटि को कैसे ठीक करें?