ORACLE存储过程中的SQL得不到赋值,查询不到结果。。
时间:2011-12-25
来源:互联网
初学过程, 下面的SQL 赋值后 是可以查询出结果的, 但写在过程中,去TEST 游标却得不到结果, 查了一下,好像是IN的三个参数,赋不到SQL中去。。 拜请各位大神们赐教, 这是怎么回事, 什么原因,怎么解决。
附代码如下:
CREATE OR REPLACE PROCEDURE query2(
in_GROUP_id IN VARCHAR2,
IN_BRANCH_ID IN varchar2,
IN_REPORT_TERM IN varchar2,
REF_CURSOR out Types.REF_CURSOR
) IS
BEGIN
open REF_CURSOR for
SELECT DISTINCT i.purse_id,
i.group_name,
i.rate,
a.proccode,
k.charge_value monthly_fee,
a.trans_amt,
a.trans_count,
h.fee_id fee_id, h.lower_limit, h.upper_limit,
decode(h.charge_value,0,1,'',1,h.charge_value) charge_value,
m.dollar,m.point,
h.RANGE_LEVEL_NO,h.report_term,
i.merchant_id,i.branch_id,i.branch_name
FROM (SELECT l.purse_id, k.rate, k.GROUP_ID, k.group_name, p.merchant_id,
p.branch_id,q.branch_name
FROM merchant_group k LEFT JOIN be_purse l
ON k.GROUP_ID = l.merchant_group
left join branch_map p
on k.group_id = p.merchant_group
left join merchant_branch q
on p.branch_id = q.branch_id
AND k.group_id = IN_GROUP_ID
ANd p.branch_id in (IN_Branch_ID)
) i
LEFT JOIN
(select purse_id, proccode, trans_amt, trans_count ,merchant_id
from trans_summary_merchant
where proccode in (
'231010', '241010', '251010', '631010'
)
AND book_term = in_report_term
AND NUM_TYPE = 'R'
)a
on a.purse_id = i.purse_id
LEFT JOIN
(SELECT DISTINCT d.purse_id, bpf.proccode,bpf.report_term,
decode(substr(f.fee_id,0,2),'R0','1','A0','2','F0','3','C1','4','C2','5','M1','6','M2','7','8') fee_id, f.charge_value,
f.lower_limit, f.upper_limit, f.RANGE_LEVEL_NO
FROM bu_proccode_fee_monthly bpf
INNER JOIN be_purse d
ON d.purse_id = bpf.purse_id
INNER JOIN merchant e
ON d.merchant_group = e.merchant_group
AND d.acquirer_id = e.acquirer_id
INNER JOIN settlement_fee f
ON f.fee_id = bpf.fee_id
INNER JOIN
(SELECT *
FROM action_type
WHERE purse_type_id = 'H'
AND action_code = 'M') g
ON g.proccode = bpf.proccode
where bpf.report_term = IN_report_term
) h
ON (i.purse_id = h.purse_id AND a.proccode = h.proccode
)
LEFT JOIN
(SELECT purse_id, charge_value
FROM bu_monthly_fee) k ON i.purse_id = k.purse_id
LEFT JOIN
(SELECT purse_id,
SUBSTR (cash_ratio,
1,
INSTR (cash_ratio, ':') - 1
) dollar,
SUBSTR (cash_ratio,
INSTR (cash_ratio, ':') + 1
) point
FROM purse) m ON m.purse_id = i.purse_id
GROUP BY i.purse_id,
i.group_name,
a.proccode,
k.charge_value,
h.fee_id,
a.trans_amt,
a.trans_count,
h.lower_limit,
h.upper_limit,
h.charge_value,
i.rate,
h.RANGE_LEVEL_NO,
m.dollar,
m.point,
i.merchant_id,
i.branch_id,
i.branch_name,
h.report_term
order by purse_id,proccode,RANGE_LEVEL_NO desc;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
NULL;
END query2;
/
附代码如下:
CREATE OR REPLACE PROCEDURE query2(
in_GROUP_id IN VARCHAR2,
IN_BRANCH_ID IN varchar2,
IN_REPORT_TERM IN varchar2,
REF_CURSOR out Types.REF_CURSOR
) IS
BEGIN
open REF_CURSOR for
SELECT DISTINCT i.purse_id,
i.group_name,
i.rate,
a.proccode,
k.charge_value monthly_fee,
a.trans_amt,
a.trans_count,
h.fee_id fee_id, h.lower_limit, h.upper_limit,
decode(h.charge_value,0,1,'',1,h.charge_value) charge_value,
m.dollar,m.point,
h.RANGE_LEVEL_NO,h.report_term,
i.merchant_id,i.branch_id,i.branch_name
FROM (SELECT l.purse_id, k.rate, k.GROUP_ID, k.group_name, p.merchant_id,
p.branch_id,q.branch_name
FROM merchant_group k LEFT JOIN be_purse l
ON k.GROUP_ID = l.merchant_group
left join branch_map p
on k.group_id = p.merchant_group
left join merchant_branch q
on p.branch_id = q.branch_id
AND k.group_id = IN_GROUP_ID
ANd p.branch_id in (IN_Branch_ID)
) i
LEFT JOIN
(select purse_id, proccode, trans_amt, trans_count ,merchant_id
from trans_summary_merchant
where proccode in (
'231010', '241010', '251010', '631010'
)
AND book_term = in_report_term
AND NUM_TYPE = 'R'
)a
on a.purse_id = i.purse_id
LEFT JOIN
(SELECT DISTINCT d.purse_id, bpf.proccode,bpf.report_term,
decode(substr(f.fee_id,0,2),'R0','1','A0','2','F0','3','C1','4','C2','5','M1','6','M2','7','8') fee_id, f.charge_value,
f.lower_limit, f.upper_limit, f.RANGE_LEVEL_NO
FROM bu_proccode_fee_monthly bpf
INNER JOIN be_purse d
ON d.purse_id = bpf.purse_id
INNER JOIN merchant e
ON d.merchant_group = e.merchant_group
AND d.acquirer_id = e.acquirer_id
INNER JOIN settlement_fee f
ON f.fee_id = bpf.fee_id
INNER JOIN
(SELECT *
FROM action_type
WHERE purse_type_id = 'H'
AND action_code = 'M') g
ON g.proccode = bpf.proccode
where bpf.report_term = IN_report_term
) h
ON (i.purse_id = h.purse_id AND a.proccode = h.proccode
)
LEFT JOIN
(SELECT purse_id, charge_value
FROM bu_monthly_fee) k ON i.purse_id = k.purse_id
LEFT JOIN
(SELECT purse_id,
SUBSTR (cash_ratio,
1,
INSTR (cash_ratio, ':') - 1
) dollar,
SUBSTR (cash_ratio,
INSTR (cash_ratio, ':') + 1
) point
FROM purse) m ON m.purse_id = i.purse_id
GROUP BY i.purse_id,
i.group_name,
a.proccode,
k.charge_value,
h.fee_id,
a.trans_amt,
a.trans_count,
h.lower_limit,
h.upper_limit,
h.charge_value,
i.rate,
h.RANGE_LEVEL_NO,
m.dollar,
m.point,
i.merchant_id,
i.branch_id,
i.branch_name,
h.report_term
order by purse_id,proccode,RANGE_LEVEL_NO desc;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
NULL;
END query2;
/
作者: badluckly1 发布时间: 2011-12-25
在PL/SQL中加断点调试一下,就可以知道参数是否传进去了。
作者: LuiseRADL 发布时间: 2011-12-25
引用 1 楼 luiseradl 的回复:
在PL/SQL中加断点调试一下,就可以知道参数是否传进去了。
在PL/SQL中加断点调试一下,就可以知道参数是否传进去了。
加了断点,值是没有赋进去的,但不清楚是为什么,也不知道怎么改 才能将值传入..
作者: badluckly1 发布时间: 2011-12-25
补充下。。值传入了最上面的那些参数里, 没有传入 BEGIN中的SQL中。。。来人帮忙么。。
作者: badluckly1 发布时间: 2011-12-25
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28