下面是我尝试编译的存储过程的一些逻辑。当没有换行符时,它编译得很好。但是,当我分手时,它不会编译。那是为什么?
正常工作时的代码:
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:无效的SQL语句
我使用的是最新版本的TOAD。
答案 0 :(得分:2)
我没有使用过TOAD,但我的猜测是TOAD将每一行后面跟一个空行作为单独的SQL语句。所以在你的情况下,TOAD可能会尝试将DECLARE
作为不正确的SQL语句执行。
我的建议是使用鼠标光标选择/突出显示整个匿名块,然后单击执行按钮。这通常适用于SQL Developer等免费工具。