execute immediate into : Execute immediate « PL SQL Statements « Oracle PL/SQL Tutorial






SQL>
SQL> CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,
  2                    ENAME VARCHAR2(10),
  3                    JOB VARCHAR2(9),
  4                    MGR NUMBER(4),
  5                    HIREDATE DATE,
  6                    SAL NUMBER(7, 2),
  7                    COMM NUMBER(7, 2),
  8                    DEPTNO NUMBER(2));

Table created.

SQL>
SQL>
SQL> INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK',    7902, TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7521, 'WARD',  'SALESMAN', 7698, TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER',  7839, TO_DATE('2-APR-1981',  'DD-MON-YYYY'), 2975, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10);

1 row created.

SQL> INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10);

1 row created.

SQL> INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 950, NULL, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10);

1 row created.

SQL>
SQL> set echo on
SQL>
SQL> create or replace function get_row_cnts( p_tname in varchar2 ) return number
  2  as
  3     l_cnt number;
  4  begin
  5          execute immediate 'select count(*) from ' || p_tname into l_cnt;
  6          return l_cnt;
  7  end;
  8  /

Function created.

SQL>
SQL> set serveroutput on
SQL> exec dbms_output.put_line( get_row_cnts('emp') );
14

PL/SQL procedure successfully completed.

SQL>
SQL> drop table emp;

Table dropped.








22.16.Execute immediate
22.16.1.Simple EXECUTE IMMEDIATE
22.16.2.Call EXECUTE IMMEDIATE in Pl/SQL block
22.16.3.Execute sql statement in a procedure
22.16.4.'execute immediate in' action
22.16.5.Define a procedure to drop a database object
22.16.6.Create a function to count table row
22.16.7.Use procedure to create an index dynamically
22.16.8.Call function and get result by using 'EXECUTE IMMEDIATE'
22.16.9.EXECUTE IMMEDIATE dynamic sql to alter session
22.16.10.Use 'execute immediate' to run a insert statement
22.16.11.select into rowtype then use it in 'execute immediate'
22.16.12.Quotation string
22.16.13.Use 'EXECUTE IMMEDIATE' to execute an update statement
22.16.14.Wrap 'EXECUTE IMMEDIATE' for current user
22.16.15.Wrap statement with 'BEGIN...END'
22.16.16.Catch exception from 'EXECUTE IMMEDIATE'
22.16.17.EXECUTE IMMEDIATE USING IN
22.16.18.Drop user, create user and grant permission with PL/SQL code
22.16.19.execute immediate into
22.16.20.Update row with 'execute immediate'