2017-04-06 6 views
0

重複したacct#を追加できないようにこのトリガーを作成しました。私は重複ACCT番号を挿入してトリガーをテストしたときには、私がUNIQUE CONSTRAINT(JL.PK.ACCOUNT)はPLSQL_trigger重複する#にエラーがあります

が助けてください違反

エラーが発生しました。

create or replace trigger update_acct# 
    before insert or update on ACCOUNT 
    for each row 
    declare 
     v_cta# NUMBER; 

    begin 
     select count(A#) into v_cta# from account where A#=:new.A#; 
     if v_cta#>1 then 
      raise_application_error (-20105, 'DUPLICATE ACCOUNT NUMBER'); 
     end if; 
    end; 

答えて

1

あなたは条件必要がある場合:

--old code 
if v_cta#>1 then 
      raise_application_error (-20105, 'DUPLICATE ACCOUNT NUMBER'); 
end if; 

--new code 
if v_cta#>0 then 
    raise_application_error (-20105, 'DUPLICATE ACCOUNT NUMBER'); 
end if; 

v_cta#は1に等しく、あなたの状態が

+0

ありがとうございました!私が数を1から0に変更したときに働いた。 – user7770852

2

あなたのトリガがエラーをスローしませんでした動作しません。それは火事もしなかった。

提供されたエラーからテーブル定義を送信しませんでしたが、defineの列A#のように見えます。重複行を挿入しようとすると、PKが検証されたときにエラーがスローされました。重複しないようにプライマリ・キーをチェックする必要はありません。オラクル社はそれが一意であることを保証します。

さらに、「ORA-04091テーブル名が突然変異しています...」というエラーが発生しました。行レベル・トリガー内でトリガー表を参照することはできません。

+0

コメントありがとう!私は理解していない "行レベルのトリガ内でトリガテーブルを参照することはできません。 – user7770852

+0

ACCOUNTテーブルの挿入または更新時にトリガが発生します。したがって、そのトリガー内では、ACCOUNTから選択することはできません。表(列)の値(....)に挿入する例外があり、Oracleはその行を保証できます。 – Belayer

関連する問題