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_%''');
    世风之狡诈多端,到底忠厚人颠扑不破; 末俗以繁华相尚,终觉冷淡处趣味弥长。
  • 相关阅读:
    两台Mysql数据库数据同步实现
    利用Python读取外部数据文件
    在Python应用中使用MongoDB
    使用python语言操作MongoDB
    windows下Graphviz安装及入门教程
    【Machine Learning】决策树案例:基于python的商品购买能力预测系统
    Python数据可视化-seaborn
    np.tile 函数使用
    Python机器学习库scikit-learn实践
    基于C#net4.5websocket客户端与服务端
  • 原文地址:https://www.cnblogs.com/simple-li/p/10012539.html
Copyright © 2011-2022 走看看