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 













     
  • 相关阅读:
    9、scala面向对象编程之继承
    8、scala面向对象编程之对象
    7、scala面向对象编程之类
    JavaScript读书笔记
    ATM流程的实现
    Python实现简单的验证码模块
    处女作——静态页面的编写
    CSS知识速递
    HTML知识速递
    员工信息表 实现增删改查操作
  • 原文地址:https://www.cnblogs.com/liaokailin/p/4146215.html
Copyright © 2011-2022 走看看