执行一个获取某年月的工作日数。
从网上找了个代码执行CREATE OR REPLACE FUNCTION Get_WorkingDays(
ny IN VARCHAR2
) RETURN INTEGER IS
/*-----------------------------------------------------------------------------------------
函数名称:Get_WorkingDays
中文名称:求某一年月中共有多少工作日
作者姓名: XINGPING
编写时间: 2004-05-23
输入参数:NY:所求包含工作日数的年月,格式为yyyymm,如200405 中国.网管联盟
返 回 值:整型值,包含的工作日数目。
算法描述:使用Last_day函数计算出参数所给年月共包含多少天,根据这个值来构造一个循环。在这个循环中先求这个月的每一天和一个已知是星期天的日期(2001-12-30是星期天)的差,所得的差再对7求模。如果所求日期在2001-12-30以前,那么所得的差既是负数,求模后所得值范围为大于-6,小于0,如-1表示星期六,故先将求模的结果加7,再求7的模. 如过所得值不等于0和6(即不是星期六和星期天),则算一个工作日。
----------------------------------------------------------------------------------------*/
Result INTEGER := 0;
myts INTEGER; --所给年月的天数
scts INTEGER; --某天距2001-12-30所差的天数
rq DATE;
djt INTEGER := 1; --
BEGIN
myts := to_char(last_day(to_date(ny,’yyyymm’)),’dd’);
LOOP
rq := TO_date(ny||substr(100+djt,2),’yyyymmdd’);
scts := rq - to_date(’2001-12-30’,’yyyy-mm-dd’);
IF MOD(MOD(scts,7)+7,7) NOT IN(0,6) THEN
Result := Result + 1;
END IF;
djt := djt + 1; EXIT WHEN djt>myts;
END LOOP;
RETURN Result;
END Get_WorkingDays;报错如下Compilation errors for FUNCTION SCOTT.GET_WORKINGDAYSError: PLS-00103: 出现符号 ""在需要下列之一时:
begin function package pragma
procedure subtype type use <an identifier>
<a double-quoted delimited-identifier> form current cursor
external language
Line: 3
Text: Result INTEGER := 0;
从网上找了个代码执行CREATE OR REPLACE FUNCTION Get_WorkingDays(
ny IN VARCHAR2
) RETURN INTEGER IS
/*-----------------------------------------------------------------------------------------
函数名称:Get_WorkingDays
中文名称:求某一年月中共有多少工作日
作者姓名: XINGPING
编写时间: 2004-05-23
输入参数:NY:所求包含工作日数的年月,格式为yyyymm,如200405 中国.网管联盟
返 回 值:整型值,包含的工作日数目。
算法描述:使用Last_day函数计算出参数所给年月共包含多少天,根据这个值来构造一个循环。在这个循环中先求这个月的每一天和一个已知是星期天的日期(2001-12-30是星期天)的差,所得的差再对7求模。如果所求日期在2001-12-30以前,那么所得的差既是负数,求模后所得值范围为大于-6,小于0,如-1表示星期六,故先将求模的结果加7,再求7的模. 如过所得值不等于0和6(即不是星期六和星期天),则算一个工作日。
----------------------------------------------------------------------------------------*/
Result INTEGER := 0;
myts INTEGER; --所给年月的天数
scts INTEGER; --某天距2001-12-30所差的天数
rq DATE;
djt INTEGER := 1; --
BEGIN
myts := to_char(last_day(to_date(ny,’yyyymm’)),’dd’);
LOOP
rq := TO_date(ny||substr(100+djt,2),’yyyymmdd’);
scts := rq - to_date(’2001-12-30’,’yyyy-mm-dd’);
IF MOD(MOD(scts,7)+7,7) NOT IN(0,6) THEN
Result := Result + 1;
END IF;
djt := djt + 1; EXIT WHEN djt>myts;
END LOOP;
RETURN Result;
END Get_WorkingDays;报错如下Compilation errors for FUNCTION SCOTT.GET_WORKINGDAYSError: PLS-00103: 出现符号 ""在需要下列之一时:
begin function package pragma
procedure subtype type use <an identifier>
<a double-quoted delimited-identifier> form current cursor
external language
Line: 3
Text: Result INTEGER := 0;
已写入 file afiedt.buf 1 CREATE OR REPLACE FUNCTION Get_WorkingDays(ny IN VARCHAR2) RETURN number
2 IS
3 res number:=0;
4 num number;
5 v_dt date;
6 begin
7 select extract(day from last_day(to_date(ny,'yyyymm'))) into num from dual;
8 for i in 1..num loop
9 select to_date(ny,'yyyymm')+i-1 into v_dt from dual;
10 if to_char(v_dt,'d') in (2,3,4,5,6) then
11 res:=res+1;
12 end if;
13 end loop;
14 return res;
15* end;
SQL> /函数已创建。SQL> select Get_WorkingDays('201101') from dual
2 /GET_WORKINGDAYS('201101')
-------------------------
21
已写入 file afiedt.buf 1 CREATE OR REPLACE FUNCTION Get_WorkingDays(ny IN VARCHAR2) RETURN number
2 IS
3 res number:=0;
4 num number;
5 v_dt date;
6 begin
7 select extract(day from last_day(to_date(ny,'yyyymm'))) into num from dual;
8 for i in 1..num loop
9 select to_date(ny,'yyyymm')+i-1 into v_dt from dual;
10 if to_char(v_dt,'d') in (2,3,4,5,6) then
11 res:=res+1;
12 end if;
13 end loop;
14 return res;
15* end;
SQL> /函数已创建。SQL> select Get_WorkingDays('201101') from dual
2 /GET_WORKINGDAYS('201101')
-------------------------
21