说明:使用此过程可任意执行批量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语句》对你有帮助,请点赞、收藏,并留下你的观点哦!