在 SqlDeveloper 中,我尝试执行以下带注释的多行 SQL EXECUTE,
execute MYPKG.MYSP (null/*Param1*/, null/*Param2*/, 123/*Param3*/,
null/*Param4*/, etc.
在第一个换行符上标记错误
execute MYPKG.MYSP (null/*Param1*/, null/*Param2*/, 123/*Param3*/, ; END;
ORA-06550: line 1, column 131:
PLS-00103: Encountered the symbol ";" when expecting one of the following:
( - + case mod new not null <an identifier>
<a double-quoted delimited-identifier> <a bind variable>
continue avg count current exists max min prior sql stddev
sum variance execute forall merge time timestamp interval
date <a string literal with character set specification>
<a number> <a single-quoted SQL string> pipe
<an alternatively-quoted st
以及此后的每个后续换行符
Error report -
Unknown Command
没有;这些换行符上的任何地方。我如何运行多行格式化 SQL 而不会抱怨换行符或注释?
这不是评论。如果您再次查看实际错误,您将看不到所显示的内容:
execute MYPKG.MYSP (null/*Param1*/, null/*Param2*/, 123/*Param3*/, ; END;
ORA-06550: line 1, column 131:
...
它实际上会显示:
BEGIN MYPKG.MYSP (null/*Param1*/, null/*Param2*/, 123/*Param3*/, ; END;
ORA-06550: line 1, column 131:
...
execute
只是匿名块的便捷包装器,它只查看脚本的当前行。所以它有效地运行:
BEGIN
MYPKG.MYSP (null/*Param1*/, null/*Param2*/, 123/*Param3*/, ;
END;
/
它添加了
BEGIN
(语句第一行后面的尾随分号)和 END;
。
您可以手动将
execute
转换为显式 BEGIN
/END;
块,或者将整个调用强制到单行上,或者您可以使用 行继续字符:
您可以通过在行尾键入连字符并按 Return 键来继续较长的 SQL*Plus 命令。如果您愿意,可以在输入连字符之前输入空格。
因此,您可以在每行末尾添加一个连字符,这将使 SQL Developer(文档适用于 SQL*Plus,但仍然适用)在将
execute
转换为匿名块时包含所有这些行:
execute MYPKG.MYSP (null/*Param1*/, null/*Param2*/, 123/*Param3*/, -
null/*Param4*/, etc.