[英]PL/SQL Dynamic Table Names
我對Oracle還是很陌生,因此不能完全確定是否有可能,或者如果我采用錯誤的方式進行操作,但是這里...
我正在修復的舊的供稿器腳本的一部分正在遍歷〜20個表(可以隨時更改)以填充相關的登台表。 這部分目前非常基礎:
...
INSERT INTO staging_tbl_1(
SELECT *
FROM source_tbl_1
);
INSERT INTO staging_tbl_2(
SELECT *
FROM source_tbl_2
);
...
源數據庫中的某些字段具有不同的約束等,這意味着它會不時地拋出異常,並且供稿器將停止。 我希望做的是在現有的Feeder程序包中創建一個過程,以在插入記錄之前遍歷每條記錄中的每一行,並將其簡單地包裝在異常塊中。 這樣就可以記錄它,而不會導致進紙器停止。
本質上,我正在追逐這樣的東西:
BEGIN procedure_x(source_record, staging_record)
-- Perform validation to ensure records exit
-- Loop through all record rows
FOR row IN (SELECT * FROM source_record) LOOP
-- Wrap in exception block
-- Insert into staging record
-- Log exception if it occurs
END LOOP;
END
我嘗試了ref游標,但是為了使它們工作,我還需要提前了解行類型(根據我的有限理解)。 我也嘗試立即執行,但是我找不到合適的方式來循環執行。 還有其他解決方法嗎?
額外:
我意識到我們確實應該解決問題的根源,而不是像這樣去解決,不幸的是,這遠遠超出了我的影響范圍。
可以執行此操作而無需執行單獨的過程,而只需將所有表引用包裝在一個循環中即可,但是我想把它留作最后的選擇。
Oracle具有記錄DML錯誤的功能。 與單個SQL語句一起使用。 不要一行一行地進行,以使您的進程爬行。
http://docs.oracle.com/cd/B19306_01/server.102/b14231/tables.htm#ADMIN10261
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.