答えて
表の行が変更された後に実行され、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. psycopg2(挿入、更新)書き込みの問題
- 3. すべてのファイルタイプをファイルに書き込む - ubuntu
- 4. ofstream私のファイルにすべて2回書き込む
- 5. Androidのpngとしてファイルに入力ストリームを書き込む
- 6. SQL Server 2005で挿入トリガを書き込む方法は?
- 7. ファイルに書き込むpython
- 8. Spark:Avroファイルに書き込む
- 9. ファイルに書き込むキーストローク
- 10. ファイルに書き込む(Python)
- 11. ファイルに書き込む
- 12. 複数行更新のトリガを書き込む方法は?
- 13. gitサブモジュールの更新フックを書き込む方法は?
- 14. Matlab:aviファイルを書き込む
- 15. Python - Pymongo文書の挿入と更新
- 16. 既存のCSVファイルに新しい列を書き込む
- 17. ファイルに書き込むときのUnicodeEncodeError
- 18. ファイルに書き込むときのファイルセグメンテーション
- 19. OCamlファイルに書き込む方法は?
- 20. MonoDroidのファイルにオブジェクトを書き込む
- 21. Javaのファイルにbyte []を書き込む
- 22. JavaのファイルにBitSetを書き込む
- 23. Torchのテーブルをファイルに書き込む
- 24. EDIファイルを読み込んで新しいファイルに書き込む
- 25. キーを値に置き換えて新しいファイルに書き込むPython
- 26. ユーザ入力[asm、dos]からファイルを書き込む方法は?
- 27. 毎回新しくファイルにデータを書き込む
- 28. 入力値をPHPでファイルに書き込む方法
- 29. PHPが入力からtxtにファイルを書き込む
- 30. 生のオブジェクトをファイルに書き込む/読み込む
ログテーブルにbefore update updateトリガを使用し、後でバッチ処理(毎晩何でも)で処理することができます。後でins/updが発生したときに基づいてデータを選択的に引き出すために使用できる「action_date」日付フィールド(またはタイムスタンプ)を必ず追加してください。 – tbone
感謝tbone、これは良い解決策になります。しかし、アプリケーションを変更することなく、私はテーブルに更新トリガーを置く必要があると思う余分な "最後の更新/変更列"その列の後半選択を追加します。または、オラクルはこのための機能を構築していますか? @tboneがコメントしたよう彼らはAFTERトリガーよりも効率的であるため – user85155