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 语句
使用简单循环插入时出现“ORA-00900 无效 SQL 语句”