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

ora-00900 invalid sql statement execute immediate

我正在尝试使用动态 SQL 解决任务,但面临 ora-00900 无效 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;

那么第一种情况的问题出在哪里呢?好像有转义引号,但是抓不到这个

如错误所述,execute immediate 不是 SQL 语句。在某些客户端中有一个 execute 命令 - SQL*Plus、SQL Developer、SQLcl 和可能的其他客户端 - 这是一个围绕匿名的 shorthand 包装器堵塞;但是从错误来看,您似乎没有使用其中之一。如果你是,你会得到 ORA-06550 和 PLS-0010:遇到 edthe symbol "alter table..." when expecting...

execute immediatea PL/SQL statement。所以它只在 PL/SQL 块内有效。

平白无意义SQL;唯一的 execute in the SQL reference 是指目录对象权限。


你的 alter table 无论如何都没有多大意义,不确定那是否应该是一个 update,但如果是的话,那不是说 what 设置为该间隔值。为什么你需要它是动态的也不明显。可能在简化发布问题时丢失了原因和实际陈述。