ORA-00903: invalid table name

xiongwenhua365 2012-07-12 08:09:26

SQL> select table_name from user_tables where table_name like 'T_';

TABLE_NAME
------------------------------
TB
T5
T4
T2
T1



declare
s varchar2(100);
begin
for x in (select table_name from user_tables where table_name like 'T_') loop
s := 'drop table :1';
dbms_output.put_line(s);
execute immediate s using x.table_name;
end loop;
end;


错误如下:请问这是怎么回事啊?

drop table :1
declare
*
ERROR at line 1:
ORA-00903: invalid table name
ORA-06512: at line 7
...全文
2317 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
勿勿 2012-07-13
  • 打赏
  • 举报
回复
在表名上有所有无法处理了
小德 2012-07-12
  • 打赏
  • 举报
回复
你用在where条件之后是对的,变量会变成where 字段=‘变量值’,
但是你在DML里面用变量替代表明,自然看做drop table '表名'处理了。
陈字文 2012-07-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:
s := 'drop table :1';
dbms_output.put_line(s);
execute immediate s using x.table_name;
因为你这段话等效于
drop table 'T1';



SQL code




1 declare
2 s varchar2(100);
3……
[/Quote]

以上使用 PL/SQL的 "绑定变量" 机制。上面的又不是DML命令!
xiongwenhua365 2012-07-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
s := 'drop table :1';
dbms_output.put_line(s);
execute immediate s using x.table_name;
因为你这段话等效于
drop table 'T1';
[/Quote]




1 declare
2 s varchar2(100);
3 begin
4 for x in (select table_name from user_tables where table_name like 'T_') loop
5 s := 'drop table :1';
6 dbms_output.put_line(x.table_name);
7 --execute immediate s using x.table_name;
8 end loop;
9* end;
10 /
T1

PL/SQL procedure successfully completed.

SQL>


不会呀,测了一把x.table_name应该还是T1而不是'T1',麻烦再指点一下,谢谢。
小德 2012-07-12
  • 打赏
  • 举报
回复
s := 'drop table :1';
dbms_output.put_line(s);
execute immediate s using x.table_name;
因为你这段话等效于
drop table 'T1';
xiongwenhua365 2012-07-12
  • 打赏
  • 举报
回复
使用组装SQL语句的方法就可以了,如下,使用上面的execute immediate using却不行,这有区别吗?请大虾位帮忙指点下。

declare
s varchar2(100);
begin
for x in (select table_name from user_tables where table_name like 'T_') loop
s := 'drop table ' || x.table_name;
dbms_output.put_line(s);
execute immediate s;
end loop;
end;

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧