2009-07-06 2 views
0

私はプログラマではありませんが、テーブルの1つのフィールドを同じテーブルの別のフィールドに自動的にコピーするタスクがあります(これは長い話です:-))。これは更新と挿入時に行う必要があり、私は本当にそれについてどうやって行くのか分かりません。 私はソースコードを持たないユーザーインターフェイスを介してデータがDBに入力されていることを指摘しておきます。そのため、DBレベルでこのような変更をトリガーなどを使用して行いたいとします。 値をコピーするシンプルなトリガーを作成しようとしましたが、エラーメッセージが表示されました。エラーを検出した後、変数として使用されるパッケージを作成する必要があることがわかりました。今私は本当に失われている!! :-)Oracleのフィールドのコピー

このフィールドを自動的に更新するソリューションが必要ですが、既にその列に存在するデータは上書きしないようにする必要があります。

誰かが私にこの手順全体を行う最も簡単で簡単な方法を教えてもらえますか?私は本当にダミーのアプローチのためのガイドが必要です。両方のフィールドが同じテーブル上にある場合

おかげで、 デビッド

+0

エラーメッセージ全体を投稿しただけではなく、その概要を投稿した場合に役立ちます。また、書き込みしようとしたトリガのコードとインストール方法を記入してください。 – skaffman

+0

こんにちはデイビッド - あなたのために働くなら、あなたはヴィンセントの答えを受け入れるべきです。 –

答えて

1

シンプルなトリガで十分でしょう。

は考えてみましょう:

SQL> CREATE TABLE t (ID NUMBER, source_col VARCHAR2(10), dest_col VARCHAR2(10)); 

Table created 
SQL> CREATE OR REPLACE TRIGGER trg_t 
    2  BEFORE INSERT OR UPDATE OF source_col ON t 
    3  FOR EACH ROW 
    4 BEGIN 
    5  IF :old.dest_col IS NULL THEN 
    6  :NEW.dest_col := :NEW.source_col; 
    7  END IF; 
    8 END; 
    9/

Trigger created 

我々は(我々が挿入された値が保持されます)トリガは、挿入のために働くならば、更新チェック:

SQL> INSERT INTO t(ID, source_col) VALUES (1, 'a'); 

1 row inserted 
SQL> SELECT * FROM t; 

     ID SOURCE_COL DEST_COL 
---------- ---------- ---------- 
     1 a   a 
SQL> UPDATE t SET source_col = 'b'; 

1 row updated 
SQL> SELECT * FROM t; 

     ID SOURCE_COL DEST_COL 
---------- ---------- ---------- 
     1 b   a 

編集:私が取るためにトリガーを更新しますdest_colの既存のデータを保存する必要があるという要件を考慮する必要があります。

+0

朗読Vincent。おそらく "もし:NEW.dest_colがnullなら..." –

+0

@Nick Pierpoint:thanks Nick私はトリガーコードを更新しました。 。 –

0

古い列とまったく同じデータを表示する必要がある場合は、(Oracle 11gを使用している場合は)仮想列を作成できます。

例はhereです。

関連する問題