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
पर लिखते हैं। ) और कॉलिंग कोड को यह विश्वास दिलाना कि कुछ ऑपरेशन सफल नहीं हुए तो सफल हो गए।