ORA-00903: 无效的表名

Posted

技术标签:

【中文标题】ORA-00903: 无效的表名【英文标题】:ORA-00903:invalid table name 【发布时间】:2016-12-21 12:20:16 【问题描述】:

我在PLSQL中有以下代码:

Declare
    tablename varchar2(20):='emp'; 
    drop_stmt  varchar2(2000);

begin
    drop_stmt:='drop table :1 ;';
    --dbms_output.put_line(drop_stmt); 
    execute immediate drop_stmt using tablename;
end;

结果:

ORA-00903:无效的表名

ORA-06512:在第 8 行

但是当我跑步时:

drop table emp ;

它刚刚成功运行。这个错误的原因可能是什么?

【问题讨论】:

无法绑定标识符(表名、列名等)。如果您确实必须使用动态 SQL,则需要在执行某种验证后对它们进行硬编码(连接) @Barbaros 为什么要为这个问题创建一个新标签?特定的错误代码使标签很差,那些应该包含在正文中而不是作为标签。如果我们为每个错误代码创建一个标签,那么就会被它们所困扰。 @ErikvonAsmuth 嗨,还有其他标签以“ORA-”为前缀,这与那些没有什么不同。这使问题更加分类,不是吗..? @BarbarosÖzhan 见Do we really need a tag for every error code?。关于这些 ORA- 标签的敏感性存在一些争议。在解决之前,我认为没有必要增加这些数量。由于问题已在正文和标题中包含错误代码,因此对可查找性影响不大。 @ErikvonAsmuth 好的。 【参考方案1】:

你必须使用这个:

drop_stmt:='drop table '||tablename; -- without ";" at the end of string
--dbms_output.put_line(drop_stmt); 
execute immediate drop_stmt;

【讨论】:

谢谢,让我试试这个。

以上是关于ORA-00903: 无效的表名的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00903,ORA-06512,同时计算所有用户表的行数(动态 sql)

链接服务器“FDMEE_SIMPHONY”的 OLE DB 提供程序“OraOLEDB.Oracle”返回消息“ORA-00903:无效表名”

在 oracle 中批量插入时表名无效

pyspark 读取格式 jdbc 生成 ORA-00903: invalid table name 错误

SQL Server2019数据库查询所有数据库名表名表结构表字段主键方法演示,执行sql提示对象名‘user_tab_columns‘ ‘user_cons_columns‘ 无效问题解决

数据库错误记录