zoukankan      html  css  js  c++  java
  • 在oracle函数中不可直接将变量作为sql语句中的参数

    错误方式:[注 S1='12','22','31'   S2='K','Z'  ]

    CREATE OR REPLACE FUNCTION FUN_TEST(S1 VARCHAR2,
                                                      S2 VARCHAR2)
      RETURN VARCHAR2 IS
      RETRUEN_STR      VARCHAR2(4000); -- 最终返回的字符
      V_SQL           VARCHAR2(1000); -- 生成的SQL
    BEGIN

        SELECT WM_CONCAT(T.AS1) INTO RETRUEN_STR
         FROM TABLE1 T
        WHERE  T.AA01 IN (S1) AND T.BB01 IN (S2 )';  
        EXECUTE IMMEDIATE V_SQL
          INTO RETRUEN_STR;

      RETURN RETRUEN_STR;

    END FUN_TEST;

    -------------------------------------------------------------------------------

    变量不可以直接放在sql语句中作为条件后的参数,需要将变量和sql进行拼接,然后再执行拼接后的语句,如下:

    正确方式:

    CREATE OR REPLACE FUNCTION FUN_TEST(S1 VARCHAR2,
                                                      S2 VARCHAR2)
      RETURN VARCHAR2 IS
      RETRUEN_STR      VARCHAR2(4000); -- 最终返回的字符
      V_SQL           VARCHAR2(1000); -- 生成的SQL
    BEGIN

        V_SQL           := 'SELECT WM_CONCAT(T.AS1)
         FROM TABLE1 T
        WHERE  T.AA01 IN (' || S1 ||
                           ') AND T.BB01 IN (' || S2 || ')';  
        EXECUTE IMMEDIATE V_SQL
          INTO RETRUEN_STR;

      RETURN RETRUEN_STR;

    END FUN_TEST;

  • 相关阅读:
    Extjs4 关于设置form中所有子控件为readOnly属性的解决方案
    Chrome调试(转)
    ExtJS4 动态加载
    CSS display和visibility的用法和区别
    利用Java调用OpenCV进行人脸识别
    Mac上安装openCV(Java版本)
    关于mysql的Fetch Time 和 Duration Time
    数据库相关中间件介绍
    JVM和java应用服务器调优
    探索 ConcurrentHashMap 高并发性的实现机制
  • 原文地址:https://www.cnblogs.com/BruceDu/p/7307583.html
Copyright © 2011-2022 走看看