2017-03-07 8 views
-1

これは私のトリガー文を作成します。SQL TRIGGERを使用して別のテーブルの行を新しいテーブルに挿入する方法は?

CREATE OR REPLACE TRIGGER time_of_inserts 
AFTER INSERT ON t_workers 
FOR EACH ROW 

BEGIN 
    SELECT pk_workerid, sysdate archivetime 
    into t_logtable 
    from t_workers 
END; 

私は、私は私が新しい主キーを挿入したい、t_workersテーブルに新しい行を挿入するたびに(それが1から一意であることができているしたいです、または挿入されたデータをコピーする)、および新しいテーブルへの挿入時間(T_logTable)が含まれます。しかし、毎回これを新しいテーブルに挿入する方法はわかりません。私はこれまでに何を思いついたのですか?

+0

ご使用のOracleのバージョンに応じて、シーケンスを使用するか、常に生成します。 –

+0

私の主な問題は、トリガされるたびに新しいテーブルに挿入されています – dmbdnr

答えて

4

を「私の主な問題は、新しいテーブルにそれが引き金だたびに挿入される」しかし、あなたは、あなたが選択している、挿入していません。挿入するには、insertキーワードを指定する必要があります。

また、トリガーテーブルから選択したくない場合は、代わりに:NEW名前空間を使用してください。

CREATE OR REPLACE TRIGGER time_of_inserts 
AFTER INSERT ON t_workers 
FOR EACH ROW 

BEGIN 
    insert into t_logtable 
    values (:new.pk_workerid , sysdate); 
END; 

、見かけ上の混乱を削除SELECT ... INTOするために、ローカル(PL/SQL)変数を移入。これは、テーブルに挿入するために使用する構文ではありません。

+0

クエリの中に「into」という言葉があるようですが、これは挿入のいくつかの形式を実行するでしょうか? –

+0

私はそれがそれを行う必要がありますtought。しかし、私には挿入物を持たないのは変ですが、これは私が見つけた最高のものです。 – dmbdnr

+3

'select into'ステートメントは、テーブルから値を変数に移入します。どこにも何も挿入しません。そのためには、insert文があります。 –

関連する問題