当前位置: 代码迷 >> Oracle管理 >> execute immediate使用遇到的有关问题
  详细解决方案

execute immediate使用遇到的有关问题

热度:47   发布时间:2016-04-24 05:08:55.0
execute immediate使用遇到的问题
在学习动态SQL的时候,接触到了“execute immediate”,然后通过它实现了动态建表。今天本来想在存储过程中删除表中数据,于是再次使用到了“execute immediate”,使用如下:
SQL code
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;

注释的两句话可以执行,但是没注释的不可以。本来以为是在取表名的时候需要使用大写,于是把tablename字符串代表的表名写成大写,但是结果还是不行,下面是执行情况和错误提示:
SQL code
SQL> exec pro_trunc;begin pro_trunc; end;ORA-00903: 表名无效ORA-06512: 在 "QIUYUE.PRO_TRUNC", line 6ORA-06512: 在 line 1

谢谢!


------解决方案--------------------
不可以这样写的,对于execute immediate直接执行时,传入的参数不可以是列名,表名

如果你分两步是可以的

例,下面这样写是可以的:
SQL code
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;
  相关解决方案