oracle 之 cursor:创建存储过程批量执行DDL语句

本文介绍了一种在Oracle数据库中批量执行DDL语句的方法,通过存储过程实现对以特定前缀开头的表进行批量删除,并记录每条DDL语句的执行日志。文章详细展示了从创建测试表、日志表到编写存储过程的全过程,最后通过调用存储过程完成了批量DDL操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:使用此过程可任意执行批量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_%''');

 

转载于:https://www.cnblogs.com/simple-li/p/10012539.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值