0

データをテーブルにロードした直後に文字を置き換える特定のユーザーのトリガーを作成することは可能ですか?

たとえば、ユーザーがデータをテーブルにロードするときに、PERS_ID列のすべての「1」を「9」に置き換える必要があります。

私はPLSQLの初心者なので、どこから始めればよいのかさえわかりません。

自分の目標を明確にできるかどうかわからないので、遠慮なく説明を求めてください。

4

1 に答える 1

3

技術的には、確かに可能です...(簡単にするために、pers_idそれは数値ではなく文字列であると想定しています。数値の場合は、もちろん、文字列に変換し、を実行して、replace元に戻すことができます。トリガー内の数値に)

SQL> create table foo( pers_id varchar2(10) );

Table created.

SQL> create trigger replace_data
  2    before insert on foo
  3    for each row
  4  begin
  5    :new.pers_id := replace( :new.pers_id, '1', '9' );
  6  end;
  7  /

Trigger created.

SQL> insert into foo values( '123abc456' );

1 row created.

SQL> select * from foo;

PERS_ID
----------
923abc456

ただし、実際には、要件は非常に奇妙に思えます。トリガーを使用して挿入されているデータをサイレントに変更することは、デバッグを非常に困難にする傾向があるため、一般的にはお勧めできません。将来の開発者は、テーブルに挿入したデータがテーブルのクエリ時に表示されるデータと一致せず、トリガーによってデータが変更されたことをすぐに理解できない場合、かなり驚かれる可能性があります。解決しようとしているビジネス上の問題を説明できれば、より適切な技術的解決策を考え出すことができるでしょう。

于 2013-02-13T16:20:48.603 に答える