我想創建一個接受兩個表名作爲參數的過程,然後將一個表中的行復制到另一個表中,一次一個。我知道批量插入和SELECT INTO
是更好的方法來做到這一點,但批量插入不工作,因爲當我插入多個行一次時,表觸發拋出突變錯誤。PLSQL動態定義光標
我見過其他答案,推薦使用動態SQL,但我堅持如何定義遊標的方式。
CREATE OR REPLACE PROCEDURE TABLE_INSERT(
donor_t IN VARCHAR2,
empty_t IN VARCHAR2
)
AS
CURSOR C1 IS
SELECT * FROM donor_t;
BEGIN
FOR row IN C1
LOOP
INSERT INTO empty_t VALUES row;
END LOOP;
END;
當編譯爲上面所寫,編譯器會引發ORA-00942: table or view does not exist.
當用硬編碼表名編制,該功能用於插入如預期中的行,沒有錯誤。
基本上你正在嘗試做的是插入的選擇,爲什麼不這樣做呢? 逐行處理數據對性能非常不利。 –
一種選擇是查看觸發器並考慮是否可以禁用批量操作,然後重新啓用它們。很明顯,您的批量操作需要處理由觸發器執行的業務邏輯。否則,請嘗試使用Oracle文檔作爲示例 - https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm#BHCGEFCA – BriteSponge
@BriteSponge甚至沒有發生過我看我是否可以禁用在插入後觸發並重新啓用它們;該解決方案就像一個魅力。 – OnLinedPaper