0

私はしばらくの間、このトリガーと戦ってきました。テーブル「MOVIMIENTO」に古い在庫、新しい在庫、それらの違い、およびそれがどのような操作であるかを送信しようとしています。唯一の問題は、ORA を取得することです。 -00984 行 12 でエラーが発生し、行 11 で sql ステートメントが無視されています。何かアイデアはありますか?

CREATE OR REPLACE TRIGGER TRG_MOVIMIENTO
AFTER UPDATE OF "STOCK" ON PRODUCTO
FOR EACH ROW
DECLARE  
 v_tmov VARCHAR2(7);
 v_cant NUMBER(6);
BEGIN
  v_cant:=:OLD.STOCK-:NEW.STOCK;
  IF :OLD.STOCK>:NEW.STOCK THEN
     v_tmov:='SALIDA';
  ELSE 
     v_tmov:='ENTRADA';
  END IF;
  INSERT INTO MOVIMIENTO(N_MOV,TIPO_MOV,STOCK_NEW,STOCK_OLD,CANT_MOV)
  VALUES(s_NUMEROMOV.nextval,v_tmod,:NEW.STOCK,:OLD.STOCK,v_cant);
END; 
/
4

1 に答える 1

3

テーブルv_tmod上の列です。MOVIMIENTOその名前の変数がないためです。それはエラーを説明するでしょう。

編集:OK、コメントを見て、何が起こっているのか知っていると思います。

宣言セクションの変数はv_tmovv_cantです。しかし、あなたのINSERT声明では、タイプミスをして使用していv_tmodます。Oracle は、これが既知の変数ではないことを認識しているため、列名である必要があると想定します。そのため、有効な列名であるかどうかを確認することさえせずに、ORA-00984 エラーを報告します。これは、ここでは列を使用できないためです。

したがって、実際のエラーはv_tmod定義された変数ではありません

于 2013-06-17T02:15:05.837 に答える