我创建了一个函数:
create or replace function f_getCblrSl(
qsrq Date,
jzrq Date,
cbrl Number)
return Number is
v_sl Number(5);
v_month Number(5);
begin
v_sl := 0;
v_month := to_char(jzrq,'mm') - to_char(qsrq,'mm');
if v_month < 1 then
if cblr >= to_char(qsrq,'dd') and cblr <= to_char(jzrq,'dd') then
v_sl := 1;
end if;
else
if cblr >= to_char(qsrq,'dd') then
v_sl := 1;
end if;
if cblr <= to_char(jzrq,'dd') then
v_sl := v_sl + 1;
end if;
v_sl := v_month -1 + v_sl;
end if;
return v_sl;
end;
end f_getCblrSl;
该是判断在qsrq起始日期和jzrq截至日期之间出现了多少个日期为13的?
在SQL/PLUS中执行生成函数的sql,报创建的函数带有编译错误。不知道错在哪儿啊?创建完后我用执行
select f_getcblrsl(to_date('2006-9-1','yyyy-mm-dd'),to_date('2006-9-31','yyyy-mm-dd'),cblr) cnt,cbrybh cbry,qcbh from xt_qcxx
报错误:程序包或函数f_getcblrsl处于无效状态!
怎么回事!
谢谢!谢谢!
create or replace function f_getCblrSl(
qsrq Date,
jzrq Date,
cbrl Number)
return Number is
v_sl Number(5);
v_month Number(5);
begin
v_sl := 0;
v_month := to_char(jzrq,'mm') - to_char(qsrq,'mm');
if v_month < 1 then
if cblr >= to_char(qsrq,'dd') and cblr <= to_char(jzrq,'dd') then
v_sl := 1;
end if;
else
if cblr >= to_char(qsrq,'dd') then
v_sl := 1;
end if;
if cblr <= to_char(jzrq,'dd') then
v_sl := v_sl + 1;
end if;
v_sl := v_month -1 + v_sl;
end if;
return v_sl;
end;
end f_getCblrSl;
该是判断在qsrq起始日期和jzrq截至日期之间出现了多少个日期为13的?
在SQL/PLUS中执行生成函数的sql,报创建的函数带有编译错误。不知道错在哪儿啊?创建完后我用执行
select f_getcblrsl(to_date('2006-9-1','yyyy-mm-dd'),to_date('2006-9-31','yyyy-mm-dd'),cblr) cnt,cbrybh cbry,qcbh from xt_qcxx
报错误:程序包或函数f_getcblrsl处于无效状态!
怎么回事!
谢谢!谢谢!
qsrq Date,
jzrq Date,
cbrl Number)
return Number is
v_sl Number(5);
v_month Number(5);
begin
v_sl := 0;
v_month := to_char(jzrq,'mm') - to_char(qsrq,'mm');
if v_month < 1 then
if cbrl >= to_char(qsrq,'dd') and cbrl <= to_char(jzrq,'dd') then
v_sl := 1;
end if;
else
if cbrl >= to_char(qsrq,'dd') then
v_sl := 1;
end if;
if cbrl <= to_char(jzrq,'dd') then
v_sl := v_sl + 1;
end if;
v_sl := v_month -1 + v_sl;
end if;
return v_sl;
end f_getCblrSl;
/
qsrq Date,
jzrq Date,
cbrl Number)
return Number is
v_sl Number(5);
v_month Number(5);
begin
v_sl := 0;
v_month := to_char(jzrq,'mm') - to_char(qsrq,'mm');
if v_month < 1 then
if cblr >= to_char(qsrq,'dd') and cblr <= to_char(jzrq,'dd') then
v_sl := 1;
end if;
else
if cblr >= to_char(qsrq,'dd') then
v_sl := 1;
end if;
if cblr <= to_char(jzrq,'dd') then
v_sl := v_sl + 1;
end if;
v_sl := v_month -1 + v_sl;
end if;
return v_sl;
end;
end f_getCblrSl;/加上这个‘/’,表示执行。