该execute immediate
语句仅在 PL/SQL 块内有效。您不能将它与普通 SQL 混合使用。您也可以(仅)动态运行 PL/SQL,但再次不要像您尝试过的那样将两者混合在一个语句中。
如果您运行在普通客户端中显示的内容,您会看到它抱怨:
Error starting at line : 1 in command -
SELECT 1 FROM DUAL
UNION
EXECUTE IMMEDIATE 'SELECT 2 FROM dual'
Error at Command Line : 3 Column : 1
Error report -
SQL Error: ORA-00928: missing SELECT keyword
00928. 00000 - "missing SELECT keyword"
*Cause:
*Action:
即使您传递的语句本身是动态执行的,您也会看到相同的错误:
BEGIN
EXECUTE IMMEDIATE q'[SELECT 1 FROM DUAL
UNION
EXECUTE IMMEDIATE 'SELECT 2 FROM dual']';
END;
/
Error report -
ORA-00928: missing SELECT keyword
ORA-06512: at line 2
00928. 00000 - "missing SELECT keyword"
进一步的考虑,虽然在这里有点没有实际意义,但如果您没有通过选择变量来使用结果,则实际上不会执行动态查询(请参阅此处的注释。