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

Oracle डायनेमिक SQL उदाहरण DBMS_SQL का उपयोग करके एक रिकॉर्ड सम्मिलित करने के लिए

इस ट्यूटोरियल में, मैं DBMS_SQL पैकेज का उपयोग करके एक रिकॉर्ड डालने के लिए Oracle डायनेमिक SQL उदाहरण दे रहा हूँ।

डायनेमिक SQL के माध्यम से, आप Oracle डेटाबेस में किसी विशेष कार्य को करने के लिए निष्पादित करने के लिए PL/SQL का उपयोग करके किसी भी DML और DDL स्टेटमेंट को पार्स कर सकते हैं।

Oracle Dynamic SQL उदाहरण:DBMS_SQL का उपयोग करके नया रिकॉर्ड डालें

निम्नलिखित पीएल/एसक्यूएल प्रक्रिया मानव संसाधन स्कीमा की कर्मचारी तालिका में एक नया रिकॉर्ड सम्मिलित करेगी। एक स्ट्रिंग वेरिएबल "V_SQL" का उपयोग इन्सर्ट स्टेटमेंट के लिए किया जाता है, ताकि इसे DBMS_SQL का उपयोग करके हेरफेर और पार्स किया जा सके। संग्रहीत कार्यविधि सात मापदंडों को स्वीकार करती है जिनका उपयोग DBMS_SQL.BIND_VARIABLE विधि का उपयोग करके बाइंड करने के लिए किया जाएगा। तालिका और अनुक्रम वस्तु के लिए स्क्रिप्ट भी देना ताकि आप स्थानीय रूप से परीक्षण कर सकें।

कर्मचारी तालिका बनाएं

CREATE TABLE EMPLOYEES
(
   EMPLOYEE_ID      NUMBER (6),
   FIRST_NAME       VARCHAR2 (20 BYTE),
   LAST_NAME        VARCHAR2 (25 BYTE) NOT NULL,
   EMAIL            VARCHAR2 (25 BYTE) NOT NULL,
   PHONE_NUMBER     VARCHAR2 (20 BYTE),
   HIRE_DATE        DATE NOT NULL,
   JOB_ID           VARCHAR2 (10 BYTE) NOT NULL,
   SALARY           NUMBER (8, 2),
   COMMISSION_PCT   NUMBER (2, 2),
   MANAGER_ID       NUMBER (6),
   DEPARTMENT_ID    NUMBER (4)
)
/

सीक्वेंस ऑब्जेक्ट बनाएं

CREATE SEQUENCE employee_seq
   START WITH 1
   INCREMENT BY 1
   ORDER
/

संग्रहीत प्रक्रिया बनाएं

CREATE OR REPLACE PROCEDURE new_employee (i_FIRST    IN VARCHAR2,
                                          i_LAST     IN VARCHAR2,
                                          i_email    IN VARCHAR2,
                                          i_phone    IN VARCHAR2,
                                          i_hired    IN DATE,
                                          i_job      IN VARCHAR2,
                                          i_deptno   IN NUMBER DEFAULT 0)
AS
   v_sql           VARCHAR2 (1000);

   cursor_var      NUMBER := DBMS_SQL.OPEN_CURSOR;
   rows_complete   NUMBER := 0;
   next_emp_id     NUMBER := employee_seq.NEXTVAL;
BEGIN
   IF i_deptno != 0
   THEN
      v_sql :=
            'INSERT INTO EMPLOYEES ( '
         || 'employee_id, first_name, last_name, email, '
         || 'phone_number, hire_date, job_id, department_id) '
         || 'VALUES( '
         || ':next_emp_id, :first, :last, :email, :phone, :hired, '
         || ':job_id, :dept)';
   ELSE
      v_sql :=
            'INSERT INTO EMPLOYEES ( '
         || 'employee_id, first_name, last_name, email, '
         || 'phone_number, hire_date, job_id) '
         || 'VALUES( '
         || ':next_emp_id, :first, :last, :email, :phone, :hired, '
         || ':job_id)';
   END IF;

   DBMS_SQL.PARSE (cursor_var, v_sql, DBMS_SQL.NATIVE);
   DBMS_SQL.BIND_VARIABLE (cursor_var, ':next_emp_id', next_emp_id);
   DBMS_SQL.BIND_VARIABLE (cursor_var, ':first', i_FIRST);
   DBMS_SQL.BIND_VARIABLE (cursor_var, ':last', i_LAST);
   DBMS_SQL.BIND_VARIABLE (cursor_var, ':email', i_email);
   DBMS_SQL.BIND_VARIABLE (cursor_var, ':phone', i_phone);

   DBMS_SQL.BIND_VARIABLE (cursor_var, ':hired', i_hired);

   DBMS_SQL.BIND_VARIABLE (cursor_var, ':job_id', i_job);

   IF i_deptno != 0
   THEN
      DBMS_SQL.BIND_VARIABLE (cursor_var, ':dept', i_deptno);
   END IF;

   rows_complete := DBMS_SQL.EXECUTE (cursor_var);
   DBMS_SQL.CLOSE_CURSOR (cursor_var);
   COMMIT;
END;
/

परीक्षा

DECLARE
   I_FIRST    VARCHAR2 (32767);
   I_LAST     VARCHAR2 (32767);
   I_EMAIL    VARCHAR2 (32767);
   I_PHONE    VARCHAR2 (32767);
   I_HIRED    DATE;
   I_JOB      VARCHAR2 (32767);
   I_DEPTNO   NUMBER;
BEGIN
   I_FIRST := 'Kevin';
   I_LAST := 'John';
   I_EMAIL := '[email protected]';
   I_PHONE := '2299378';
   I_HIRED := SYSDATE;
   I_JOB := 'CLERK';
   I_DEPTNO := 10;

   NEW_EMPLOYEE (I_FIRST,
                        I_LAST,
                        I_EMAIL,
                        I_PHONE,
                        I_HIRED,
                        I_JOB,
                        I_DEPTNO);
END;

परिणाम

यह भी देखें:

  • ओरेकल में एसक्यूएल इंजेक्शन की भेद्यता और इसकी रोकथाम को प्रदर्शित करने के लिए एक उदाहरण

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वसंत दृढ़ता ढांचे का उपयोग कर ओरेकल फ़ंक्शन या संग्रहीत प्रक्रिया को कैसे कॉल करें?

  2. एक दृश्य में एक अशक्त स्तंभ कैसे बनाएं?

  3. DBMS_STATS के साथ उपयोगकर्ता-परिभाषित रूटीन, भाग II

  4. एसएसआईएस पर स्क्रिप्ट कार्य से निष्पादित करते समय ओरेकल प्रक्रिया परिणाम नहीं लौटा रही है

  5. भौतिक दृश्य - अंतिम ताज़ा की पहचान करना