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_%''');
世风之狡诈多端,到底忠厚人颠扑不破;
末俗以繁华相尚,终觉冷淡处趣味弥长。
posted on 2018-11-24 16:28 Simple-Sir 阅读(2146) 评论(0) 编辑 收藏 举报