应该可以 select * from tbl_czy where func_check_money(czyno) > 1000 最简单的,楼主定义函数func_check_money将传入的参数加1 返回czyno+1的值 和1000比较,一试就知道了!
我也是这样使用的,但编译的时候报告"PLS-00225:子程序或游标引用超出范围",如何解决?
检查func_check_money函数看看返回的是一个值还是什么其它的。
函数如下: function func_deqc_error( v_BZNO tbl_rjyls.bzno%type, v_MENO tbl_rjyls.txn_meno%TYPE) return varchar2 is v_error varchar2(256); begin if v_BZNO <> '01' then v_error := '外币金额 > 1万'; return v_error; end if;
if v_BZNO = '01' and v_MENO = '11' then v_error := '人民币现金 > 5万'; return v_error; end if;
if v_BZNO = '01' and v_MENO = '12' then v_error := '人民币转帐 > 10万'; return v_error; end if;
v_error := ''; return v_error; end func_deqc_error;调用: procedure pkg_check_dcqk( v_JGNO tbl_jg.jgno%TYPE, v_JYRQ tbl_rjyls.jyrq%TYPE, v_CZYNO tbl_czy.czyno%TYPE) is begin insert into tbl_ccdj (lsno, ccnr, jgno, jyrq, gyno, ccmno, jdrq) select vouc_no, func_deqc_error(bzno, txn_meno), --'人民币现金 > 5万' txn_sdn, jyrq, teller_id, '00001', --大额存取款超限 TO_CHAR(sysdate(), 'YYYY-MM-DD') from tbl_rjyls where txn_sdn = v_JGNO and jyrq = v_JYRQ and txn_code in ('1002','1100','1200','1602','1610','1620','1691','3005','3010','3090','3091','3092','3505','3510','3590','3591','3592') and ( (bzno = '01' and txn_meno = '11' and new_bal > 50000.00) or (bzno = '01' and txn_meno = '12' and new_bal > 100000.00) or (bzno <> '01' and new_myamt > 10000.00)) order by zh, bzno, txn_meno; 错误: "PLS-00225:子程序或游标引用超出范围"如果去掉函数调用编译就OK; 请高手帮忙看一下。
select * from tbl_czy where func_check_money(czyno) > 1000
最简单的,楼主定义函数func_check_money将传入的参数加1 返回czyno+1的值
和1000比较,一试就知道了!
function func_deqc_error(
v_BZNO tbl_rjyls.bzno%type,
v_MENO tbl_rjyls.txn_meno%TYPE) return varchar2
is
v_error varchar2(256);
begin
if v_BZNO <> '01' then
v_error := '外币金额 > 1万';
return v_error;
end if;
if v_BZNO = '01' and v_MENO = '11' then
v_error := '人民币现金 > 5万';
return v_error;
end if;
if v_BZNO = '01' and v_MENO = '12' then
v_error := '人民币转帐 > 10万';
return v_error;
end if;
v_error := '';
return v_error;
end func_deqc_error;调用:
procedure pkg_check_dcqk(
v_JGNO tbl_jg.jgno%TYPE,
v_JYRQ tbl_rjyls.jyrq%TYPE,
v_CZYNO tbl_czy.czyno%TYPE)
is
begin
insert into tbl_ccdj
(lsno, ccnr, jgno, jyrq, gyno, ccmno, jdrq)
select vouc_no,
func_deqc_error(bzno, txn_meno), --'人民币现金 > 5万'
txn_sdn,
jyrq,
teller_id,
'00001', --大额存取款超限
TO_CHAR(sysdate(), 'YYYY-MM-DD')
from tbl_rjyls
where txn_sdn = v_JGNO
and jyrq = v_JYRQ
and txn_code in ('1002','1100','1200','1602','1610','1620','1691','3005','3010','3090','3091','3092','3505','3510','3590','3591','3592')
and ( (bzno = '01' and txn_meno = '11' and new_bal > 50000.00)
or (bzno = '01' and txn_meno = '12' and new_bal > 100000.00)
or (bzno <> '01' and new_myamt > 10000.00))
order by zh, bzno, txn_meno; 错误:
"PLS-00225:子程序或游标引用超出范围"如果去掉函数调用编译就OK;
请高手帮忙看一下。
在加入到INSERT 语句中看看
或许是你tbl_ccdj表中的字段长度不够,或者类型不匹配!