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 immediate
是 a PL/SQL statement。所以它只在 PL/SQL 块内有效。
平白无意义SQL;唯一的 execute
in the SQL reference 是指目录对象权限。
你的 alter table
无论如何都没有多大意义,不确定那是否应该是一个 update
,但如果是的话,那不是说 what 设置为该间隔值。为什么你需要它是动态的也不明显。可能在简化发布问题时丢失了原因和实际陈述。
我正在尝试使用动态 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 immediate
是 a PL/SQL statement。所以它只在 PL/SQL 块内有效。
平白无意义SQL;唯一的 execute
in the SQL reference 是指目录对象权限。
你的 alter table
无论如何都没有多大意义,不确定那是否应该是一个 update
,但如果是的话,那不是说 what 设置为该间隔值。为什么你需要它是动态的也不明显。可能在简化发布问题时丢失了原因和实际陈述。