zoukankan      html  css  js  c++  java
  • Oracle IN 传递字符串参数查询失效

    在写存储过程中有如下代码:
     FOR a IN (      
             SELECT a.svo_no,a.AUDIT_NO,a.order_id  FROM TT_PI_MODEL_REL a 
        ) LOOP
                
    SELECT COUNT(1) INTO V_FLAG  FROM TT_PI_ORDER WHERE pi_id IN (a.order_id)  AND REGULARIZA_DATE IS NOT NULL ;
     
    //执行若干操作
    
    END LOOP;
    
      其中 
    SELECT a.svo_no,a.AUDIT_NO,a.order_id  FROM TT_PI_MODEL_REL a    查出来的order_id 有多个值  1000007845,1000007669

    讲order_id放入 pi_id IN (a.order_id)中执行 查询出错

    因为 in 中的参数问题,此时不能简单的理解为 pi_id in (1000007845,1000007669) 而是一个 pi_id in(一个变量) 从而导致查询出错

    解决办法 : 事先将
    SELECT COUNT(1) INTO V_FLAG  FROM TT_PI_ORDER WHERE pi_id IN (a.order_id)  AND REGULARIZA_DATE IS NOT NULL ;
    拼接成sql语句的形式,而不要用传递a.order_id的形式,

    操作如下:

      execute IMMEDIATE 
                     ' SELECT COUNT(1)  FROM TT_PI_ORDER WHERE pi_id IN ('||a.order_id||')  AND REGULARIZA_DATE IS NOT NULL  '
                     INTO c_flag ;

    使用 

     execute IMMEDIATE 解决问题

    其用法 可参考网络 :http://kevinlee0755.iteye.com/blog/1381617 













     
  • 相关阅读:
    《人月神话》阅读笔记3
    团队冲刺0110
    团队冲刺0109
    团队冲刺0108
    团队冲刺0107
    团队冲刺0106
    团队冲刺0105
    团队冲刺010304
    团队冲刺0102
    团队冲刺0101
  • 原文地址:https://www.cnblogs.com/liaokailin/p/4146215.html
Copyright © 2011-2022 走看看