私のOracleデータベースのvarchar2
列のORDER_PARTS_LIST
にコロンで区切られた値のリストがあります。Oracle APEXデータベース・トリガー - データベース列の参照に関する問題
は(私はこのようなリストにデータを格納することはベストプラクティスではないかもしれないということが、今ちょうどその事実を無視するために理解しています。)ここで
は、関連するテーブルのカラムです:
ORDER_TABLE(
ORDER_NUMBER number,
ORDER_PARTS_LIST varchar(4000))
PARTS_TABLE(
PART_NUMBER varchar(20),
ASSIGNED_ORDER_NUMBER number)
I条件付きのトリガーを持っている:
create or replace trigger "ORDER_PARTS_T1"
BEFORE
insert or update or delete on "ORDER_TABLE"
for each row
begin
if :new.ORDER_PARTS_LIST LIKE '%'+PART_NUMBER+'%' then
update PARTS_TABLE set ASSIGNED_ORDER_NUMBER = :ORDER_NUMBER;
end if;
end;
私はこのトリガを実行すると、私は次のエラーを取得する:
0123何が起こることになっているが、トリガチェックがどのPART_NUMBERs
、
PARTS_TABLE
に、
ORDER_TABLE
で、
ORDER_PARTS_LIST
に含まれ、そしてその後カラムに、
ORDER_TABLE
で影響を受けた行に対して、
ORDER_NUMBER
を挿入することである
PLS-00201: identifier 'PART_NUMBER' must be declared
PARTS_TABLE
です。
最後に、ORDER内のすべてのPARTSにそのORDERのNUMBERでフラグを付けます。
これは意味がありますか?
私はこのトリガの変数を正しく定義して実行するようにしているとは確信していません。正直なところ、トリガが働いていてもそれを実行するかどうかは疑問があります。私がそれを定義したように、トリガの機能を得るための提案や助けはすばらしいはずです。前もって感謝します。このすべてが一緒にどのように適合するか
ありがとうございました!チャームのように働いた! – Spags
ちょっとしたフォローアップのように、あなたは削除を言及しました。私はあなたが正しいと思うのですが、レコードがデータベースから削除されない可能性があるので、それが本当に含まれている理由はありません。ただし、処理のためにPART_NUMBERSを送信する前に、PART_NUMBERSをORDERから削除する可能性があります。パーツが注文から削除された場合、PARTS_TABLEを簡単に更新する方法はありますか? OLD&NEWなどを使用して別のトリガーが必要ですか? – Spags
多分 - 私は提案で私の答えを編集しました。 –