0

我一直在与这个触发器战斗一段时间,我试图将旧股票,新股票发送到表“MOVIMIENTO”,它们之间的区别以及它是什么样的操作,唯一的问题是我得到了一个 ORA第 12 行出现 -00984 错误,第 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。因为没有那个名字的变量。这将解释错误。

编辑:好的,看看评论,我想我知道发生了什么。

声明部分中的变量是v_tmovv_cant。但是在您的INSERT陈述中,您打错了字并使用了v_tmod. Oracle 认为这不是一个已知变量,因此假定它必须是列名。所以它然后报告 ORA-00984 错误,甚至没有检查它是否是有效的列名。这是因为您不能在此处使用列。

所以真正的错误v_tmod不是定义的变量

于 2013-06-17T02:15:05.837 回答