Oracle-11g-R2

如何根據一列值導出它們之間連結的多個表的某些行?

  • June 2, 2017

我不確定我的問題是否清楚,所以讓我重新表述一下。我有三個這樣組織的表:

邏輯模型

我想轉儲這些表,但我對所有行都不感興趣,我只想要上個月最後更新的那些。數據泵導出有沒有辦法做到這一點?我想到了 QUERY 參數,但我不能使用它,因為 SON 和 DAUGHTER 表中沒有 last_updated_date 。

例如,如果在我的MOTHER表中,我有 3 行:

  • id_mother= 1 ; last_updated_date= 01/01/17 ;
  • id_mother= 2 ; last_updated_date= 01/02/17 ;
  • id_mother= 3 ; last_updated_date= 01/03/17.

而且,在我的SON表中,我有 2 行:

  • id_son= 1 ; id_mother= 2 ;
  • id_son= 2 ; id_mother= 3.

如果我想導出 3 月份的行,該過程將返回MOTHER表的一行 ( id_mother= 3) 和表的一行SON( id_son= 2)。

我該如何處理?

如果您使用相關子查詢,則可以。檢查手冊

QUERY=son:"where exists (
   select * 
   from mother 
   where
       mother.id_mother = ku$.id_mother and 
       mother.last_updated > trunc(sysdate,'month')"

ku$代表您實際導出的表,所以這裡是 table son

從 Oracle 12c 開始,您有VIEWS_AS_TABLES 參數。然後您可以導出視圖的數據並將其儲存在表中,例如使用 sqlplus do

create view new_son
as
select son.*
from son, mother
where
   mother.id_mother = son-id_mother and 
   mother.last_updated > trunc(sysdate,'month')"

現在使用

VIEWS_AS_TABLES='new_son'

如果您導入它,它將創建一個表new_son

引用自:https://dba.stackexchange.com/questions/175127