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_%''');

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM