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

Oracle PL/SQL:डायनेमिक SQL उदाहरण तत्काल निष्पादित करें का उपयोग कर

इस ट्यूटोरियल में, मैं 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 कैसे प्रिंट करें?

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle PL/SQL डेवलपर का उपयोग करके परीक्षण डेटा जेनरेट करें

  2. CLOB पर SUBSTR का प्रदर्शन

  3. Oracle में BLOB कॉलम में इमेज डेटा लोड हो रहा है

  4. लूप रिवर्स उदाहरण के लिए Oracle

  5. Oracle Apps R12.2 . में TLS को सक्षम करना