2017-12-05 6 views
0

私はビューからテーブルへの毎日のロードを行う必要があります。最初のロード後に、元のレコードがビューのソース表から削除されるシナリオが存在する可能性があります。これらのレコードが更新されるシナリオもあります。テーブルからビューへのデルタレコードの挿入に最適なアプローチ

ストアドプロシージャを実行すると、ロードされたテーブルはデルタレコードを取得する必要があります。これは新しいインサートだけを意味します。また、削除された行にはDとしてマークする必要があります。これに加えて、ソースデータの更新もこの表で更新し、Uとマークする必要があります。 ケース1の場合に示されている添付イメージを参照してください。更新してから削除します。 左側がビューを表し、右側がロードしようとしているテーブルを表します。 Click for attached image ありがとうございます!

シャム

+0

書ベースのアプローチを好むことができますOP 'sql-server'タグを付けました。 'merge'クエリについて読んでください。 –

+0

なぜこれらの更新と対比してビューを使用しないのですか – scsimon

+0

はmysqlまたはsql-serverですか?関連する情報のみにタグを付けてください。それ以外の場合は複雑になる可能性があります。 –

答えて

0

あなたは、行のテーブルで作業している場合は、列のテーブルの上に、次のサンプルを使用することができHANAデータベーステーブルにトリガを使用することを好むなら、あなたはあなたは

create trigger Salary_A_DEL after DELETE on Salary 
REFERENCING OLD ROW myoldrow 
FOR EACH ROW 
begin 

INSERT INTO SalaryLog (
    Employee, 
    Salary, 
    Operation, 
    DateTime 
) VALUES (
    :myoldrow.Employee, 
    :myoldrow.Salary, 
    'D', 
    CURRENT_DATE 
); 

end; 



create trigger Salary_A_UPD after UPDATE on Salary 
REFERENCING NEW ROW mynewrow, OLD ROW myoldrow 
FOR EACH ROW 
begin 

INSERT INTO SalaryLog (
    Employee, 
    Salary, 
    Operation, 
    DateTime 
) VALUES (
    :mynewrow.Employee, 
    :mynewrow.Salary, 
    'U', 
    CURRENT_DATE 
); 

end; 



create trigger Salary_A_INS after INSERT on Salary 
REFERENCING NEW ROW mynewrow 
FOR EACH ROW 
begin 

INSERT INTO SalaryLog (
    Employee, 
    Salary, 
    Operation, 
    DateTime 
) VALUES (
    :mynewrow.Employee, 
    :mynewrow.Salary, 
    'I', 
    CURRENT_DATE 
); 

end; 
関連する問題