Oracle SqlDeveloper 在多行执行 SP 上失败,并带有注释:PLS-00103:遇到符号“;”当期待以下其中一项时

问题描述 投票:0回答:1

在 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 而不会抱怨换行符或注释?

sql oracle oracle-sqldeveloper
1个回答
1
投票

这不是评论。如果您再次查看实际错误,您将看不到所显示的内容:

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.
© www.soinside.com 2019 - 2024. All rights reserved.