ora-00900 无效的 sql 语句立即执行

Posted

技术标签:

【中文标题】ora-00900 无效的 sql 语句立即执行【英文标题】:ora-00900 invalid sql statement execute immediate 【发布时间】:2021-05-18 14:44:39 【问题描述】:

我正在尝试使用动态 SQL 解决任务,但遇到了 ora-00900 invalid sql 语句的问题。

execute immediate 'alter table my_table set interval (NUMTOYMINTERVAL(1, ''MONTH''))';

但是,它在将要执行的语句视为字符串的匿名块中起作用。

DECLARE
str VARCHAR2 (250) := 'alter table my_table set interval (NUMTOYMINTERVAL(1, ''MONTH''))';
BEGIN
    execute immediate str;
END;

那么第一种情况的问题在哪里?它看起来像带有转义引号,但无法捕捉到这个。

【问题讨论】:

【参考方案1】:

正如错误所说,execute immediate 不是 SQL 语句。在某些客户端(SQL*Plus、SQL Developer、SQLcl 和可能的其他客户端)中有一个execute 命令,它是匿名块的速记包装器;但是从错误来看,您似乎没有使用其中之一。如果你是,你会得到 ORA-06550 和 PLS-0010: Encounter edthe symbol "alter table..." when expected...

execute immediate 是 a PL/SQL statement。所以它只在 PL/SQL 块中有效。

在普通 SQL 中没有意义;唯一的execute in the SQL reference 指的是目录对象权限。


无论如何,您的alter table 没有多大意义,不确定这是否应该是update,但如果是这样,what 就不能设置为该间隔值。也不清楚为什么您需要它是动态的。在简化发布您的问题时,可能会丢失该原因和实际陈述。

【讨论】:

哦.. 当然!这说得通。像往常一样,后来变成了一个多么愚蠢的问题。是的,我已经为这个问题简化了它。谢谢!

以上是关于ora-00900 无效的 sql 语句立即执行的主要内容,如果未能解决你的问题,请参考以下文章

如何找出 datagrip 中的 ORA-00900 无效 SQL 语句

Oracle.DataAccess.Client.OracleException: ORA-00900: 无效的 SQL 语句

sql ORA-00900: 无效的 SQL 语句

使用简单循环插入时出现“ORA-00900 无效 SQL 语句”

ORA-00900:PHP中无效的SQL语句,但在sqlplus中有效

SQLSyntaxErrorException: ORA-00900: 使用 Java 的无效 SQL 语句