初学过程, 下面的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;
/

解决方案 »

  1.   

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

  2.   

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

  3.   

    你的输入参数变量名与sql中的变量名存在大小写不统一,先全改为小写,变量名不要与字段名冲突哦
      

  4.   


    仔细查阅了 你所指出的问题, 更改了之后 可以确定的是 与大小写无关..   我在TEST中 传入了参数, 而且用output 可以打出 所传的值,  只是执行BEGIN 中的SQL 时,WHERE 条件 中的 变量 拿不到传入的值....