0

ソースとターゲットの 2 つのテーブルがあります。ソーステーブルは外部データソースで更新/リフレッシュされ、毎日実行され、Oracle のマージ機能を使用してターゲットテーブルの行を更新/挿入する PL/SQL ブロックがあります。

ここで、ターゲット テーブルの列 (電子メール) が外部ソースによって更新される可能性がある状況があります。したがって、この電子メールは、上記の PL/SQL のマージ機能を使用してソース テーブルの電子メールによって更新/上書きされています。

メール以外のものが変更された場合にのみターゲットテーブルの行を更新するように、マージ関数に何かがありますか? 必要に応じて、ソース テーブルとターゲット テーブルに新しい列を追加できます。

create or replace
PROCEDURE INSERT_UPDATE_TARGET AS 

BEGIN
  merge into INTEGRATION_TARGET t
  using  v_merge vm 
  on (t.person_num = vm.person_num) 
  when matched then update set T.YEAR_START = VM.YEAR_START,
    T.SEMESTER_START = VM.SEMESTER_START,         
    T.SATAC_DATABASE_NAME = VM.SATAC_DATABASE_NAME,   
    T.STUDY_LEVEL = VM.STUDY_LEVEL,  
    T.REF_NUM = VM.REF_NUM,          
    T.SEX = VM.SEX,                    
    T.DATE_OF_BIRTH = VM.DATE_OF_BIRTH,         
    T.DATE_RECEIVED = VM.DATE_RECEIVED,
    T.TITLE = VM.TITLE,
    T.FAMILY_NAME = VM.FAMILY_NAME,
    T.GIVEN_NAME_1 = VM.GIVEN_NAME_1,
    T.STREET_NAME = VM.STREET_NAME,
    T.STREET_NAME_2 = VM.STREET_NAME_2,
    T.STREET_NAME_3 = VM.STREET_NAME_3,
    T.POSTAL_STATE = VM.POSTAL_STATE,
    T.POSTAL_TOWN = VM.POSTAL_TOWN,
    T.POSTAL_POSTCODE = VM.POSTAL_POSTCODE,
    T.COUNTRY = VM.COUNTRY,
    T.MOBILE = VM.MOBILE,
    T.EMAIL = VM.EMAIL
when not matched then insert (T.YEAR_START,
    T.SEMESTER_START,         
    T.SATAC_DATABASE_NAME,   
    T.STUDY_LEVEL,  
    T.REF_NUM,                
    T.PERSON_NUM,             
    T.SEX,                    
    T.DATE_OF_BIRTH,         
    T.DATE_RECEIVED,
    T.TITLE,
    T.FAMILY_NAME,
    T.GIVEN_NAME_1,
    T.STREET_NAME,
    T.STREET_NAME_2,
    T.STREET_NAME_3,
    T.POSTAL_STATE,
    T.POSTAL_TOWN,
    T.POSTAL_POSTCODE,
    T.COUNTRY,
    T.MOBILE,
    T.EMAIL
       ) 
    values(VM.YEAR_START,
    VM.SEMESTER_START,         
    VM.SATAC_DATABASE_NAME,   
    VM.STUDY_LEVEL,  
    VM.REF_NUM,                
    VM.PERSON_NUM,             
    VM.SEX,                    
    VM.DATE_OF_BIRTH,         
    VM.DATE_RECEIVED,
    VM.TITLE,
    VM.FAMILY_NAME,
    VM.GIVEN_NAME_1,
    VM.STREET_NAME,
    VM.STREET_NAME_2,
    VM.STREET_NAME_3,
    VM.POSTAL_STATE,
    VM.POSTAL_TOWN,
    VM.POSTAL_POSTCODE,
    VM.COUNTRY,
    VM.MOBILE,
    VM.EMAIL

    );
END;

ありがとう

4

1 に答える 1

1

update ステートメントに where 句を追加する

于 2012-06-12T08:23:48.677 に答える