当前位置: 首页 > news >正文

Oracle PL/SQL 循环批量执行存储过程

1. 查询存储过程

        根据数据字典USER_OBJECTS查询出所有存储过程。

2. 动态拼接字符串(参数等)

        根据数据字典USER_ARGUMENTS动态拼接参数。

3. 动态执行

        利用EXECUTE IMMEDIATE动态执行无名块。

4. 输出执行信息

        利用DBMS_OUTPUT.PUT_LINE输出执行成功与否信息。

SET SERVEROUTPUT ON;
DECLAREv_sql          varchar2(32767);v_head         varchar2(32767);v_tail         varchar2(32767);n_count        number := 0;crlf           constant    varchar2(4) := chr(13) || chr(10);
BEGINFOR rec1 IN (SELECT object_nameFROM USER_OBJECTSWHERE OBJECT_TYPE = 'PROCEDURE'ORDER BY 1)LOOPv_sql := null;v_head := null;v_tail := null;-------------------------------------------- Header------------------------------------------v_head := v_head || 'DECLARE' || crlf;FOR rec3 IN (SELECT CASE data_typeWHEN 'DATE' THEN'    d_out' || position || '    date;'ELSE'    v_out' || position || '    varchar2(1000);'END varFROM user_argumentsWHERE object_name = rec1.object_nameAND in_out <> 'IN'ORDER BY position)LOOPv_head := v_head || rec3.var || crlf;END LOOP;v_head := v_head || 'BEGIN' || crlf;v_head := v_head || '    ' || rec1.object_name || '('  || crlf;-------------------------------------------- Process------------------------------------------FOR rec2 IN (SELECT *FROM user_argumentsWHERE object_name = rec1.object_nameORDER BY position) LOOP--*****************************-- set in parameterIF rec2.in_out = 'IN' thenIF rec2.position = 1 thenIF rec2.data_type = 'DATE' THENv_sql := v_sql || '        ' || rec2.argument_name || ' => SYSDATE' || crlf;ELSEv_sql := v_sql || '        ' || rec2.argument_name || ' => 1'       || crlf;END IF;ELSEIF rec2.data_type = 'DATE' THENv_sql := v_sql || '      , ' || rec2.argument_name || ' => SYSDATE' || crlf;ELSEv_sql := v_sql || '      , ' || rec2.argument_name || ' => 1'       || crlf;END IF;END IF;-- set out parameterELSEIF rec2.position = 1 thenIF rec2.data_type = 'DATE' THENv_sql := v_sql || '        ' || rec2.argument_name || ' => d_out' || rec2.position || crlf;ELSEv_sql := v_sql || '        ' || rec2.argument_name || ' => v_out' || rec2.position || crlf;END IF;ELSEIF rec2.data_type = 'DATE' THENv_sql := v_sql || '      , ' || rec2.argument_name || ' => d_out' || rec2.position || crlf;ELSEv_sql := v_sql || '      , ' || rec2.argument_name || ' => v_out' || rec2.position || crlf;END IF;END IF;END IF;END LOOP;-------------------------------------------- Tail------------------------------------------v_tail := v_tail || '    );' || crlf;v_tail := v_tail || 'END;' || crlf;-------------------------------------------- Execute SQL--------------------------------------------dbms_output.put_line(v_head || v_sql || v_tail);BEGINn_count := n_count + 1;EXECUTE IMMEDIATE v_head || v_sql || v_tail;DBMS_OUTPUT.PUT_LINE(LPAD(n_count, 3, '0') || '_存储过程:' || rec1.object_name || '执行成功。');EXCEPTIONWHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(LPAD(n_count, 3, '0') ||'_存储过程:' || rec1.object_name || '执行失败。');END;END LOOP;ROLLBACK;
EXCEPTIONWHEN OTHERS THENROLLBACK;RAISE;
END;
/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LT7911UX 国产原装 一拖三 edp 转LVDS 可旋转 可缩放
  • 汽车零配件行业看板管理系统应用
  • 算法简介:什么是算法?——定义、历史与应用详解
  • 使用 Vue.js 和 Element Plus 实现自动完成搜索功能
  • 【MySQL】6.表的增删查改(CURD)
  • Git协作
  • 预测算法面试
  • 【ARMv8/v9 GIC 系列 5.6 -- GIC 超优先级中断详细介绍】
  • mysql的事务,你弄懂了吗?(Innodb)
  • R语言学习笔记3-基本类型篇
  • DR模式介绍
  • C++20中的基于范围的for循环(range-based for loop)
  • leetcode165.解密数字
  • 矩阵分析与应用1-矩阵代数基础
  • 热词分析与维度人物构建
  • C++入门教程(10):for 语句
  • HTTP中的ETag在移动客户端的应用
  • JavaScript 奇技淫巧
  • javascript数组去重/查找/插入/删除
  • js继承的实现方法
  • PhantomJS 安装
  • PHP CLI应用的调试原理
  • Python 基础起步 (十) 什么叫函数?
  • quasar-framework cnodejs社区
  • SpingCloudBus整合RabbitMQ
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 批量截取pdf文件
  • # Maven错误Error executing Maven
  • #14vue3生成表单并跳转到外部地址的方式
  • #pragma data_seg 共享数据区(转)
  • #Z2294. 打印树的直径
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (1)(1.9) MSP (version 4.2)
  • (33)STM32——485实验笔记
  • (备忘)Java Map 遍历
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)JAVA使用POI操作excel
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (排序详解之 堆排序)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ***原理与防范
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Core 发展历程和版本迭代
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET序列化 serializable,反序列化
  • @KafkaListener注解详解(一)| 常用参数详解
  • @基于大模型的旅游路线推荐方案
  • [20171102]视图v$session中process字段含义
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [C++打怪升级]--学习总目录