execute immediate使用遇到的问题
在学习动态SQL的时候,接触到了“execute immediate”,然后通过它实现了动态建表。今天本来想在存储过程中删除表中数据,于是再次使用到了“execute immediate”,使用如下:
create or replace procedure pro_trunc istablename varchar(15) :='URGE_T';begin --execute immediate 'truncate table '||tablename; --execute immediate 'truncate table urge_t'; execute immediate 'truncate table :1' using tablename; execute immediate 'truncate table :1' using 'urge_t';end pro_trunc;
SQL> exec pro_trunc;begin pro_trunc; end;ORA-00903: 表名无效ORA-06512: 在 "QIUYUE.PRO_TRUNC", line 6ORA-06512: 在 line 1
create or replace procedure pro_trunc istablename varchar2(15) := 'urge_t';p_val varchar2(1000);begin execute immediate 'select ''truncate table ''||:1 from dual ' into p_val using tablename; execute immediate p_val;end pro_trunc;/exec pro_trunc;