簡體   English   中英

PL / SQL動態表名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM