因此,我正在调试一个带有编译错误的sql函数:
错误(16,1):PLS-00103:遇到符号"/“
..which发生在函数的最末尾:
create or replace
function total_weekdays(fromdate in date, todate in date)
return number
as totaldays number := 0;
dates number := 0;
BEGIN
select to_number(count(dates)) into totaldays from
(select to_char(fromdate + level -1, 'dd/mm/YYYY DY') as dates
from dual connect by level <= todate - fromdate +1
minus
select to_char(ho_date, 'dd/mm/YYYY DY') as dates
from FS.fs_holiday
) where not regexp_like(dates,'SUN|SAT');
return totaldays;
END;
/
Prompt *** RPT_PACK_GEN_INV_MOVEMENT Package ***
CREATE OR REPLACE PACKAGE REPORTS_CLIENT."RPT_PACK_GEN_INV_MOVEMENT" AS
Procedure GEN_INV_MOVEMENT(pv_RunDate_i DATE default null);
Procedure RE_GEN_INV_MOVEMENT(pv_RunDate_i DATE default null);
Procedure GEN_INV_MOVEMENT_SUMMARY(pv_RunDate_i DATE default null);
Procedure GEN_Opening(pv_RunDate_i DATE);
end RPT_PACK_GEN_INV_MOVEMENT;发布于 2017-08-11 03:37:04
您所展示的内容可以在工作表中正常编译(没有演示的FS.模式前缀):
create table fs_holiday(ho_date date);
create or replace
function total_weekdays(fromdate in date, todate in date)
return number
as totaldays number := 0;
dates number := 0;
BEGIN
select to_number(count(dates)) into totaldays from
(select to_char(fromdate + level -1, 'dd/mm/YYYY DY') as dates
from dual connect by level <= todate - fromdate +1
minus
select to_char(ho_date, 'dd/mm/YYYY DY') as dates
from fs_holiday
) where not regexp_like(dates,'SUN|SAT');
return totaldays;
END;
/
Function TOTAL_WEEKDAYS compiled如果您在对象查看器中打开该函数并单击SQL选项卡,那么它将不带斜杠显示。
把斜杠加回去,然后编译,就会得到你所看到的错误,
Error(15,1): PLS-00103: Encountered the symbol "/" The symbol "/" was ignored. 在对象查看器上下文中,您不应该使用斜杠。在工作表中,以in SQL*Plus的身份,SQL Developer:
...处理PL/SQL子程序的方式与处理SQL命令的方式相同,不同之处在于分号(;)或空行不会终止和执行块。通过输入句点(.)终止PL/SQL子程序在一条新的线路上。还可以通过在新行上输入斜杠(/)来终止和执行PL/SQL子程序。
因此,在工作表中,必须使用斜杠来分隔(已命名的)块的末尾,并标识整个create语句。
在对象查看器中,您只能看到该对象的代码,因此不需要使用斜线分隔符,SQL窗口中的所有内容都被视为对象源代码的一部分。
类似地,如果查看user_source数据字典视图,会发现没有为斜杠存储任何行。
select line, text from user_source where name = 'TOTAL_WEEKDAYS' order by line;
LINE TEXT
---------- --------------------------------------------------------------------------------
1 function total_weekdays(fromdate in date, todate in date)
2 return number
3 as totaldays number := 0;
4 dates number := 0;
5 BEGIN
6 select to_number(count(dates)) into totaldays from
7 (select to_char(fromdate + level -1, 'dd/mm/YYYY DY') as dates
8 from dual connect by level <= todate - fromdate +1
9 minus
10 select to_char(ho_date, 'dd/mm/YYYY DY') as dates
11 from fs_holiday
12 ) where not regexp_like(dates,'SUN|SAT');
13 return totaldays;
14 END;
14 rows selected.它是客户端语句处理的一部分,而不是函数的一部分。
如果您在对象查看器中,则不能在同一SQL窗口中创建第二个对象。这是您正在查看的对象的源代码。
如果您想在脚本中一次创建多个对象,则使用工作表(右键单击您的连接并选择“Open SQL worksheet”),将所有代码放入其中,然后作为脚本运行(F5)。如果你想使用object视图然后展开你的连接,右击“Packages”选项,然后选择“New Package”。
阅读有关managing objects和SQL Worksheet的更多信息。
https://stackoverflow.com/questions/45621937
复制相似问题