zoukankan      html  css  js  c++  java
  • oracle 之 cursor:创建存储过程批量执行DDL语句

    说明:使用此过程可任意执行批量DDL语句,调用DDL查询语句时,注意转义字符,使用 ' 转义

    需求:批量删除以CUR_TEST开头的表,且有日志记录。

    环境准备:建几张以CUR_TEST开头测试表。

    CREATE TABLE CUR_TEST_1(ID INT);
    CREATE TABLE CUR_TEST_2(ID INT);
    CREATE TABLE CUR_TEST_3(ID INT);

    创建日志表:

    CREATE TABLE PRO_BATCH_DDL_LOG(OP_TIME DATE,DDL_INFO VARCHAR2(100));

    创建批量执行DDL操作存储过程:

    CREATE OR REPLACE PROCEDURE PRO_BATCH_DDL(SQL_CODE VARCHAR2) AS
    TYPE CUR_TYPE IS REF CURSOR; --定义动态游标类型
    CUR_BATCH_DDL CUR_TYPE; --定义动态游标参数
    DDL_CODE VARCHAR2(100); --定义接收值参数
    BEGIN
    OPEN CUR_BATCH_DDL FOR SQL_CODE; --打开游标,并赋值。
    LOOP --开始循环
      FETCH CUR_BATCH_DDL INTO DDL_CODE; --将游标内的值,赋值给DDL_CODE
      EXIT WHEN CUR_BATCH_DDL%NOTFOUND; --当游标中无值时退出循环
      EXECUTE IMMEDIATE DDL_CODE; --动态执行DDL
      COMMIT; --多使用commit是个好习惯
      INSERT INTO PRO_BATCH_DDL_LOG VALUES(SYSDATE,DDL_CODE);  --将DDL语句插入日志表
      COMMIT; --多使用commit是个好习惯
    END LOOP; --结束循环
    CLOSE CUR_BATCH_DDL; --关闭游标
    END;

    编写批量执行的SQL语句,并检查SQL查询结果是否有误:

    SELECT 'DROP TABLE '||TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE'CUR_TEST_%';

    调用过程(PRO_BATCH_DDL):

    CALL PRO_BATCH_DDL('SELECT ''DROP TABLE ''||TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE''CUR_TEST_%''');
    世风之狡诈多端,到底忠厚人颠扑不破; 末俗以繁华相尚,终觉冷淡处趣味弥长。
  • 相关阅读:
    JavaScript的性能优化:加载和执行
    JS获取图片的原始尺寸
    深入理解js构造函数
    Revit二次开发 获取缩略图
    WPF listbox分页
    WPF ListBox 图片显示及分页
    Revit禁用RibbonPanel
    C# excel 单元格居中
    WPF TreeView
    WPF ListView绑定数据
  • 原文地址:https://www.cnblogs.com/simple-li/p/10012539.html
Copyright © 2011-2022 走看看