इस ट्यूटोरियल में, मैं 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;
परिणाम
यह भी देखें:
- ओरेकल में एसक्यूएल इंजेक्शन की भेद्यता और इसकी रोकथाम को प्रदर्शित करने के लिए एक उदाहरण
-
वसंत दृढ़ता ढांचे का उपयोग कर ओरेकल फ़ंक्शन या संग्रहीत प्रक्रिया को कैसे कॉल करें?
-
एक दृश्य में एक अशक्त स्तंभ कैसे बनाएं?
-
DBMS_STATS के साथ उपयोगकर्ता-परिभाषित रूटीन, भाग II
-
एसएसआईएस पर स्क्रिप्ट कार्य से निष्पादित करते समय ओरेकल प्रक्रिया परिणाम नहीं लौटा रही है
-
भौतिक दृश्य - अंतिम ताज़ा की पहचान करना