+ -
当前位置:首页 → 问答吧 → ORACLE存储过程中的SQL得不到赋值,查询不到结果。。

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;
/

作者: badluckly1   发布时间: 2011-12-25

在PL/SQL中加断点调试一下,就可以知道参数是否传进去了。

作者: LuiseRADL   发布时间: 2011-12-25

引用 1 楼 luiseradl 的回复:
在PL/SQL中加断点调试一下,就可以知道参数是否传进去了。

加了断点,值是没有赋进去的,但不清楚是为什么,也不知道怎么改 才能将值传入..

作者: badluckly1   发布时间: 2011-12-25

补充下。。值传入了最上面的那些参数里, 没有传入 BEGIN中的SQL中。。。来人帮忙么。。

作者: badluckly1   发布时间: 2011-12-25