我试图用动态SQL来解决一个任务,但面临一个问题或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;那么,第一种情况的问题是什么呢?它看起来像转义引号,但无法捕捉到这一点。
发布于 2021-05-18 14:54:54
正如错误说的那样,execute immediate不是一个SQL语句。在一些客户端中有一个execute命令-- SQL*Plus、SQLcl、SQLcl和其他客户机--它是匿名块的简写包装器;但从错误的角度看,您似乎并没有使用其中之一。如果你是,你会得到ORA-06550和PLS-0010:遇到编辑符号"alter .“当期待..。
execute immediate是PL/SQL语句。因此,它仅在PL/SQL块中有效。
它在普通SQL中没有任何意义;唯一的execute 在SQL引用中是指目录对象特权。
无论如何,您的alter table没有多大意义,不确定它是否应该是一个update,但如果是的话,它没有说明该将什么设置为该间隔值。也不清楚为什么您需要它是动态的。可能这个理由和实际陈述在简化发布你的问题的过程中丢失了。
https://stackoverflow.com/questions/67588597
复制相似问题