Mega Code Archive

 
Categories / Oracle PLSQL / PL SQL
 

Use execute immediate to create dynamic query in a procedure

SQL> CREATE TABLE EMP(   2      EMPNO NUMBER(4) NOT NULL,   3      ENAME VARCHAR2(10),   4      JOB VARCHAR2(9),   5      MGR NUMBER(4),   6      HIREDATE DATE,   7      SAL NUMBER(7, 2),   8      COMM NUMBER(7, 2),   9      DEPTNO NUMBER(2)  10  ); Table created. SQL> INSERT INTO EMP VALUES(2, 'Jack', 'Tester', 6,TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30); 1 row created. SQL> INSERT INTO EMP VALUES(3, 'Wil', 'Tester', 6,TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30); 1 row created. SQL> INSERT INTO EMP VALUES(4, 'Jane', 'Designer', 9,TO_DATE('2-APR-1981', 'DD-MON-YYYY'), 2975, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(5, 'Mary', 'Tester', 6,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30); 1 row created. SQL> INSERT INTO EMP VALUES(6, 'Black', 'Designer', 9,TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7, 'Chris', 'Designer', 9,TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10); 1 row created. SQL> INSERT INTO EMP VALUES(8, 'Smart', 'Helper', 4,TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(9, 'Peter', 'Manager', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10); 1 row created. SQL> INSERT INTO EMP VALUES(10, 'Take', 'Tester', 6,TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30); 1 row created. SQL> INSERT INTO EMP VALUES(13, 'Fake', 'Helper', 4,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20); 1 row created. SQL> SQL> SQL> CREATE or replace PROCEDURE update_sal (id in number, p_sal in number)   2    authid current_user   3    AS   4    BEGIN   5      update EMP set sal = p_sal where empno = id;   6    END;   7    / Procedure created. SQL> SQL> show errors No errors. SQL> SQL> CREATE OR REPLACE procedure update_sal (id in number, p_sal in number) authid current_user as   2  begin   3    execute immediate 'update EMP set '||'sal = :x ' ||'where empno = :y' using p_sal, id;   4  end;   5  / Procedure created. SQL> SQL> exec update_sal (6,5000); PL/SQL procedure successfully completed. SQL> SQL> select ename, empno, sal from EMP where ename = USER; no rows selected SQL> SQL> drop procedure update_sal; Procedure dropped. SQL> drop table emp; Table dropped.