失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > oracle 之 cursor:创建存储过程批量执行DDL语句

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

时间:2021-01-31 10:35:56

相关推荐

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) ASTYPE CUR_TYPE IS REF CURSOR; --定义动态游标类型CUR_BATCH_DDL CUR_TYPE; --定义动态游标参数DDL_CODE VARCHAR2(100); --定义接收值参数BEGINOPEN CUR_BATCH_DDL FOR SQL_CODE; --打开游标,并赋值。LOOP --开始循环FETCH CUR_BATCH_DDL INTO DDL_CODE; --将游标内的值,赋值给DDL_CODEEXIT WHEN CUR_BATCH_DDL%NOTFOUND; --当游标中无值时退出循环EXECUTE IMMEDIATE DDL_CODE; --动态执行DDLCOMMIT; --多使用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_%''');

如果觉得《oracle 之 cursor:创建存储过程批量执行DDL语句》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。