Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群25
Java1234官方群25:838462530
        

springcloud分布式电商秒杀实战课程

实战RabbitMQ消息队列课程(免费领取)

毕设代做包查重包过联系人QQ:1982956321毕设大神 毕设代做包查重包过

66套java实战课程无套路领取

Java1234 VIP课程

领取微信扫码登录Java实现视频教程

Java1234至尊VIP(特价活动)

Oracle 在存储过程或函数中执行字符串sql PDF 下载


分享到:
时间:2021-02-23 09:30来源:http://www.java1234.com 作者:转载  侵权举报
Oracle 在存储过程或函数中执行字符串sql PDF 下载
失效链接处理
Oracle 在存储过程或函数中执行字符串sql PDF 下载


本站整理下载:
提取码:az61 
 
 
相关截图:
 
主要内容:

有时,我们需要在存储过程或函数中根据条件拼凑一些sql字符串语句,然后再执行拼凑后的sql字符串,如何做到呢?
参考以下代码:
 
FUNCTION CALCULATE_TARGET_SCORE (CUR_MONTH IN NVARCHAR2)
   RETURN NCLOB
IS
   PRAGMA AUTONOMOUS_TRANSACTION;
 
   TVALUE_SQL          VARCHAR2 (2000);         --查询目标值的sql(不能把类型声明为NVARCHAR2)
   RESULT_STR          NCLOB;
   KPI_VALUE           NVARCHAR2 (200);
   CUR_MONTH_BILL_ID   NUMBER (19);                                    --固话单ID
BEGIN
   --获得当前固话单
   SELECT MAX (ID)
     INTO CUR_MONTH_BILL_ID
     FROM GP_MONTH_BILL
    WHERE MONTH = CUR_MONTH AND IS_USE = 1;
 
 
   --循环获得每个明细的完成值sql
   IF CUR_MONTH_BILL_ID > 0                                             --区县指标
   THEN
      TVALUE_SQL :=
            'SELECT TO_CHAR('
         || CUR_ROW.MAIN_FIELD
         || ') FROM '
         || CUR_ROW.END_TABLE
         || '_'
         || CUR_MONTH
         || ' WHERE TO_CHAR(DISTRICT_ID)='''
         || CUR_ROW.E_DISTRICT_ID
         || '''';
   ELSE                                                               --客户经理指标
      TVALUE_SQL :=
            'SELECT TO_CHAR('
         || CUR_ROW.MAIN_FIELD
         || ') FROM '
         || CUR_ROW.END_TABLE
         || '_'
         || CUR_MONTH
         || ' WHERE MANAGER_NO='''
         || CUR_ROW.MANAGER_NO
         || '''';
   END IF;
 
   BEGIN
      EXECUTE IMMEDIATE TVALUE_SQL INTO KPI_VALUE;      --执行sql,得到完成值kpi_value
   EXCEPTION
      WHEN OTHERS
      THEN
         RESULT_STR :=
               RESULT_STR
            || '<br/> sql执行错误:'
            || TVALUE_SQL
            || ' INTO KPI_VALUE';
   END;
   --一些sql逻辑,含dml语句
   COMMIT;
END;
 
关键语句:EXECUTE IMMEDIATE TVALUE_SQL INTO KPI_VALUE;
本项目涉及到的知识点:
1)在该示例中,需要把查询的值动态赋值给一个变量。注意变量的赋值不是在sql字符串中去拼凑,而是在执行sql字符串时在末尾加入 INTO VAL
2)如果要通过查询方式调用函数,同时函数中包含DML 语句时,在声明函数需要加入 PRAGMA AUTONOMOUS_TRANSACTION;
      查询调用函数示例: SELECT YOUR_FUN(VAL1,VAL2...)  FROM DUAL;
3)如果函数声明中含有 PRAGMA AUTONOMOUS_TRANSACTION; 则在函数结尾加入commit 或 rollback
关联阅读:ORA-14551: 无法在查询中执行 DML 操作

 
 
------分隔线----------------------------
锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程