为啥有换行符时我的 PL/SQL 过程不能编译?

Posted

技术标签:

【中文标题】为啥有换行符时我的 PL/SQL 过程不能编译?【英文标题】:Why will my PL/SQL procedure not compile when there are line breaks?为什么有换行符时我的 PL/SQL 过程不能编译? 【发布时间】:2014-11-20 18:23:02 【问题描述】:

下面是我试图编译的存储过程的一些逻辑。当没有换行符时,它编译得很好。但是,当我分解它时,它不会编译。这是为什么呢?

正常运行时的代码:

DECLARE
curr_fy varchar2(4);
last_fy varchar2(4);
get_month number;
BEGIN
get_month := to_number(to_char(sysdate, 'MM'));
If get_month < 6 then
curr_fy := to_char(sysdate, 'YYYY');
last_fy := to_char(sysdate, 'YYYY') - 1;
END IF;
If get_month > 5 then
curr_fy := to_char(sysdate, 'YYYY') + 1;
last_fy := to_char(sysdate, 'YYYY');
END IF;
dbms_output.put_line(curr_fy);
END;

无法正常工作时的代码:

DECLARE

curr_fy varchar2(4);
last_fy varchar2(4);
get_month number;

BEGIN

get_month := to_number(to_char(sysdate, 'MM'));

If get_month < 6 then
curr_fy := to_char(sysdate, 'YYYY');
last_fy := to_char(sysdate, 'YYYY') - 1;
END IF;

If get_month > 5 then
curr_fy := to_char(sysdate, 'YYYY') + 1;
last_fy := to_char(sysdate, 'YYYY');
END IF;

dbms_output.put_line(curr_fy);

END;

我在编译第二版代码时收到以下错误消息:ORA-00900: invalid SQL statement

我正在使用最新版本的 TOAD。

【问题讨论】:

我想这与 Toad 有关,因为您的两个示例都在 SQL Developer 中编译。 在 PL/SQL Developer 中也能正常编译和运行。请编辑您的问题并包含有关您在 Toad 中运行时遇到的错误的信息。谢谢。 也许 TOAD 的行为类似于 SQL*Plus:空行终止语句。 您应该使用 F9 执行,而不是 CTRL+Enter 或 Shift+F9。后两者使用将空行解释为 SQL 终止符的遗留代码,这在技术上是不正确的。 F9 使用一个解析器,可以准确地检测您的语句。使用 F9 而非 Toad 论坛上已详细介绍的旧功能的原因有很多。 【参考方案1】:

我没有使用过 TOAD,但我的猜测是 TOAD 将后跟空行的每一行视为单独的 SQL 语句。因此,在您的情况下,TOAD 可能会尝试将 DECLARE 作为不正确的 SQL 语句执行。

我的建议是使用鼠标光标选择/突出显示整个匿名块,然后单击执行按钮。这通常适用于 SQL Developer 等免费工具。

【讨论】:

以上是关于为啥有换行符时我的 PL/SQL 过程不能编译?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle PL/SQL查询结果如何自动换行

为啥这个 PL/SQL 过程不起作用?

div+css为啥我的图片不能自动换行,我想让他每行只显示三个产品,但是第四个产品就是不往下面走

为啥 PL/SQL 会失败

为啥用在线编辑器输入的文字,显示出来的时候不能自动换行,而正常的文本框输入的就能自动换行。特别是

Oracle中,特殊字符(如回车换行等)的拼接