答えて
表の行が変更された後に実行され、UTL_FILEパッケージを使用してログ・ファイルに書き込むトリガーを作成する必要があります。
UTL_FILEパッケージ情報はここで見つけることができます: http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_file.htm
とトリガのドキュメントには、ここで見つけることができます: http://bytes.com/topic/oracle/answers/762007-trigger-output-text-file
:あなたがここに探しているものに似た答えはあり http://docs.oracle.com/cd/B10501_01/appdev.920/a96590/adg13trg.htm
ここでPL/SQLを使用してファイルに書き込む方法の詳細: http://www.devshed.com/c/a/Oracle/Writing-to-Text-Files-in-Oracle-PLSQL/
希望します。
は、あなたがBEFOREトリガーを検討する必要があります - オラクルのドキュメントから:BEFORE行トリガーは少し行トリガー後よりも、より効率的です。 AFTER行トリガーでは、影響を受けたデータ・ブロックをトリガーに対して1回(論理読み取りではなく、物理読み取りではなく)読み取ってからトリガー・ステートメントで再度読み取る必要があります。あるいは、BEFORE行トリガーでは、トリガー・ステートメントとトリガーの両方に対してデータ・ブロックを一度だけ読み取る必要があります。 – Ollie
はい、hereには、update
の例があります。
insert
と同様の操作を行うだけで済みます。
DML時にファイルシステムに書き込むことは避けますが、毎晩(または何らかの頻度で)バッチ処理でデータを取り出すことになります。
あなたのOPからは、更新後に「新しい」データが必要か、更新前に「古い」データが必要かはっきりしません。最新のデータだけが必要な場合は、modified_dateフィールド(日付またはタイムスタンプタイプ)を追加し、トリガーを介してそれを更新するだけではいかがですか?
create table test
(
id number,
val varchar2(100),
modified_date date default sysdate not null
)
;
CREATE OR REPLACE TRIGGER TR_TEST_BU
BEFORE UPDATE
ON TEST REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
:new.modified_date := sysdate;
end;
insert into test(id, val) values (1, 'Insert 1');
commit;
select * from test;
exec dbms_lock.sleep(5);
update test set val = 'Update 1' where id = 1;
commit;
select * from test;
あなたが(またはあなたが削除されたデータを気に)更新前の古いデータが必要な場合は、そこからデータを抽出し、履歴テーブルに古いか、削除された値を書き込むようにトリガを変更します。
トリガーを表に追加すると、関連付けられたDMLアクティビティーが遅くなることにも注意してください。一部のショップでは、トリガーをビジネスロジックルール(「すべてのアプリケーションはmodifed_dateを更新する必要があります」という勅令)に置き換えることでこれを回避したいと考えています。これは通常、データの不一致を招きます。
- 1. .jsonファイルを読み込んで、新しいファイルに書き込む方法、Pythonで改行を挿入する
- 2. オラクルは、別のテーブルに挿入したときに更新をトリガーする
- 3. psycopg2(挿入、更新)書き込みの問題
- 4. jsonにディレクトリ内のすべてのファイルを書き込む
- 5. すべてのファイルタイプをファイルに書き込む - ubuntu
- 6. すべてのJava出力をtxtファイルに書き込む
- 7. すべてのCamera2 CaptureResultsをファイルに書き込む
- 8. モジュールはファイルをどこに書き込むべきですか?
- 9. ファイルの変更を検出してファイルに書き込む
- 10. ofstream私のファイルにすべて2回書き込む
- 11. Androidのpngとしてファイルに入力ストリームを書き込む
- 12. SQL Server 2005で挿入トリガを書き込む方法は?
- 13. 新しいファイル要素がすべて1つのファイルに上書きされた場合、すべての新しいchar要素を書き込む
- 14. Mysql:テーブルに挿入した後にログファイルに書き込む
- 15. すべてのファイルを読み取らずにファイルに書き込む
- 16. 上書き挿入の更新は外部テーブルのデータを更新します
- 17. スコアボードに入力トランザクションを書き込むべき場所
- 18. ディレクトリにファイルを書き込むには
- 19. PERL:入力ファイルに書き込む(元のファイルを上書きしないで)
- 20. ファイルに書き込むpython
- 21. ファイルに書き込む(Python)
- 22. ファイルに書き込む(Python)
- 23. Qt:ファイルに書き込む
- 24. cURL - ファイルに書き込む
- 25. Spark:Avroファイルに書き込む
- 26. ファイルに書き込むキーストローク
- 27. ファイルに書き込む
- 28. xmlファイルに書き込む
- 29. ファイルに書き込む
- 30. jpbcのparams.propertiesファイルに書き込むべきもの
ログテーブルにbefore update updateトリガを使用し、後でバッチ処理(毎晩何でも)で処理することができます。後でins/updが発生したときに基づいてデータを選択的に引き出すために使用できる「action_date」日付フィールド(またはタイムスタンプ)を必ず追加してください。 – tbone
感謝tbone、これは良い解決策になります。しかし、アプリケーションを変更することなく、私はテーブルに更新トリガーを置く必要があると思う余分な "最後の更新/変更列"その列の後半選択を追加します。または、オラクルはこのための機能を構築していますか? @tboneがコメントしたよう彼らはAFTERトリガーよりも効率的であるため – user85155