我创建了一个函数:
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处于无效状态!
怎么回事!
谢谢!谢谢!
解决方案 »
- oracle完整安装,需要安装哪些组件?
- Oracle如何创建只读用户
- oracle存储过程中字符串连接符
- 数据库左联接问题,为何WHERE条件中不能添加右边表的查询条件?
- 怎样将日期型数据转换成字符串 ,不是在sql语句中转换 各位大哥帮帮忙
- 如何计算两个时间的差
- 因目标主机或对象不存在 ,连接失败 怎么回事啊????
- 很奇怪的问题?为什么直接在oracle的dba里插入一条日期型的数据,会出现错误,而添加不进去呢?
- oracle8.0.5在win2000上安装失败,解决给高分!
- 在linux装了oracle的客户端,怎么没有这些目录:
- 高手进来,快!
- "数据库异常:数据提供方内部错误(-3000) ",在线等 ,解决即结帐,决不食言!!!
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 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;1. 拼写错误cbrl ;
2. 多了一个end 结束;