इस ट्यूटोरियल में, मैं EXECUTE IMMEDIATE स्टेटमेंट का उपयोग करके डायनेमिक SQL को प्रदर्शित करने के लिए Oracle PL/SQL प्रोग्राम उदाहरण दे रहा हूँ।
Oracle PL/SQL तत्काल गतिशील SQL उदाहरण निष्पादित करें
यदि कोई मान वास्तविक मान से भिन्न है, तो निम्न PL/SQL प्रक्रिया कर्मचारी तालिका में रिकॉर्ड को कर्मचारी आईडी के लिए अद्यतन करेगी।
अद्यतन विवरण एक स्ट्रिंग का उपयोग करके गतिशील रूप से तैयार किया जाएगा, और फिर इसे तत्काल तत्काल कथन का उपयोग करके निष्पादित किया जाएगा। SQL कथन केवल पारित किए गए पैरामीटर और नए मान रखने के लिए बनाया जाएगा।
उदाहरण के लिए, यदि आप पहले_नाम और कर्मचारी के वेतन को अपडेट करना चाहते हैं, तो पैरामीटर i_id, first_name, और i_salary के लिए मान पास करें, बाकी पैरामीटर शून्य हो सकता है। अपडेट स्टेटमेंट केवल इन कॉलम के लिए जेनरेट किया जाएगा।
CREATE OR REPLACE PROCEDURE update_emp_rec ( i_id IN employees.employee_id%TYPE, i_first IN employees.first_name%TYPE, i_last IN employees.last_name%TYPE, i_email IN employees.email%TYPE, i_phone IN employees.phone_number%TYPE, i_job IN employees.job_id%TYPE, i_salary IN employees.salary%TYPE, i_commission_pct IN employees.commission_pct%TYPE, i_manager_id IN employees.manager_id%TYPE, i_department_id IN employees.department_id%TYPE) AS emp_upd_rec employees%ROWTYPE; sql_string VARCHAR2 (1000); set_count NUMBER := 0; BEGIN SELECT * INTO emp_upd_rec FROM employees WHERE employee_id = i_id; sql_string := 'UPDATE EMPLOYEES SET '; IF i_first != emp_upd_rec.first_name THEN IF set_count > 0 THEN sql_string := sql_string || ', FIRST_NAME =''' || i_first || ''''; ELSE sql_string := sql_string || ' FIRST_NAME =''' || i_first || ''''; set_count := set_count + 1; END IF; END IF; IF i_last != emp_upd_rec.last_name THEN IF set_count > 0 THEN sql_string := sql_string || ', LAST_NAME =''' || i_last || ''''; ELSE sql_string := sql_string || ' LAST_NAME =''' || i_last || ''''; set_count := set_count + 1; END IF; END IF; IF UPPER (i_email) != emp_upd_rec.email THEN IF set_count > 0 THEN sql_string := sql_string || ', EMAIL =''' || UPPER (i_email) || ''''; ELSE sql_string := sql_string || ' EMAIL =''' || UPPER (i_email) || ''''; set_count := set_count + 1; END IF; END IF; IF UPPER (i_phone) != emp_upd_rec.phone_number THEN IF set_count > 0 THEN sql_string := sql_string || ', PHONE_NUMBER =''' || UPPER (i_phone) || ''''; ELSE sql_string := sql_string || ' PHONE_NUMBER =''' || UPPER (i_phone) || ''''; set_count := set_count + 1; END IF; END IF; IF i_job != emp_upd_rec.job_id THEN IF set_count > 0 THEN sql_string := sql_string || ', JOB_ID =''' || i_job || ''''; ELSE sql_string := sql_string || ' JOB_ID =''' || i_job || ''''; set_count := set_count + 1; END IF; END IF; IF i_salary != emp_upd_rec.salary THEN IF set_count > 0 THEN sql_string := sql_string || ', SALARY =' || i_salary; ELSE sql_string := sql_string || ' SALARY =' || i_salary; set_count := set_count + 1; END IF; END IF; IF i_commission_pct != emp_upd_rec.commission_pct THEN IF set_count > 0 THEN sql_string := sql_string || ', COMMISSION_PCT =' || i_commission_pct; ELSE sql_string := sql_string || ' COMMISSION_PCT =' || i_commission_pct; set_count := set_count + 1; END IF; END IF; IF i_manager_id != emp_upd_rec.manager_id THEN IF set_count > 0 THEN sql_string := sql_string || ', MANAGER_ID =' || i_manager_id; ELSE sql_string := sql_string || ' MANAGER_ID =' || i_manager_id; set_count := set_count + 1; END IF; END IF; IF i_department_id != emp_upd_rec.department_id THEN IF set_count > 0 THEN sql_string := sql_string || ', DEPARTMENT_ID =' || i_department_id; ELSE sql_string := sql_string || ' DEPARTMENT_ID =' || i_department_id; set_count := set_count + 1; END IF; END IF; sql_string := sql_string || ' WHERE employee_id = ' || i_id; IF set_count > 0 THEN DBMS_OUTPUT.put_Line (sql_string); EXECUTE IMMEDIATE sql_string; ELSE DBMS_OUTPUT.PUT_LINE ( 'No update needed, ' || 'all fields match original values'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE ('No matching employee found'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE( 'Data entry error has occurred, ' || 'please check values and try again' || sql_string); END; /
प्रक्रिया चलाएँ
कर्मचारी आईडी 199 के लिए फर्स्ट_नाम और वेतन को अपडेट करने के लिए उपरोक्त प्रक्रिया को निष्पादित करने के लिए पीएल/एसक्यूएल कोड निम्नलिखित है।
SET SERVEROUTPUT ON; DECLARE I_ID NUMBER; I_FIRST VARCHAR2 (20); I_LAST VARCHAR2 (25); I_EMAIL VARCHAR2 (25); I_PHONE VARCHAR2 (20); I_JOB VARCHAR2 (10); I_SALARY NUMBER; I_COMMISSION_PCT NUMBER; I_MANAGER_ID NUMBER; I_DEPARTMENT_ID NUMBER; BEGIN I_ID := 199; I_FIRST := 'Joseph'; I_LAST := NULL; I_EMAIL := NULL; I_PHONE := NULL; I_JOB := NULL; I_SALARY := 3099; I_COMMISSION_PCT := NULL; I_MANAGER_ID := NULL; I_DEPARTMENT_ID := NULL; UPDATE_EMP_REC (I_ID, I_FIRST, I_LAST, I_EMAIL, I_PHONE, I_JOB, I_SALARY, I_COMMISSION_PCT, I_MANAGER_ID, I_DEPARTMENT_ID); COMMIT; END; /
आउटपुट
UPDATE EMPLOYEES SET FIRST_NAME ='Joseph', SALARY =3099 WHERE employee_id = 199 PL/SQL procedure successfully completed.
यह भी देखें:
- Oracle प्रक्रिया में तालिका को कैसे छोटा करें?
- DBMS_SQL का उपयोग करके रिकॉर्ड सम्मिलित करने के लिए Oracle डायनेमिक SQL उदाहरण
- पीएल/एसक्यूएल में लूप का उपयोग किए बिना 1 से 10 कैसे प्रिंट करें?