2011-05-02 32 views
1

我已经申请如何克服发生变异表错误休耕指令发生变异表错误:ORA-00932努力克服

http://asktom.oracle.com/pls/asktom/ASKTOM.download_file?p_file=6551198119097816936

但在我的最后触发我休耕错误:

SQL> create or replace trigger Factura_Detalle_ai 
after insert or update of PRODUCTO on Factura_Detalle 
begin 
       for i in 1 .. state_pkg.newRows.count loop 

         UPDATE Factura_Detalle 
         SET Precio = (SELECT pre.PRECIO 
         FROM PRECIO pre 
         WHERE pre.PRODUCTO = state_pkg.newRows(i)); 

       end loop; 
end; 
/
    2 3 4 5 6 7 8 9 10 11 12 13 
Warning: Trigger created with compilation errors. 

SQL> show errors trigger factura_detalle_ai 
Errors for TRIGGER FACTURA_DETALLE_AI: 

LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
4/4  PL/SQL: SQL Statement ignored 
7/23  PL/SQL: ORA-00932: inconsistent datatypes: expected NUMBER got 
     ROWID 

有什么想法?

问候

回答

1

这个替换您的where子句:

WHERE ROWID = state_pkg.newRows(i)); 

ROWID为每个行的地址的伪列,这是一个数据类型。

编辑:

或者,也许是这样的:

UPDATE Factura_Detalle 
SET Precio = 
(
    SELECT pre.PRECIO 
    FROM PRECIO pre 
    WHERE pre.PRODUCTO = Factura_Detalle.PRODUCTO 
) 
WHERE ROWID = state_pkg.newRows(i); 
+0

嗨@jonearles,感谢您的回答,但是当我试图在表中插入一行我得到另一个错误:错误位于第1行: ORA-01410:无效的ROWID ORA-06512:在 “CFD_O.FACTURA_DETALLE_AI”,4号线 ORA-04088:触发器 'CFD_O.FACTURA_DETALLE_AI' – andrestoga 2011-05-02 12:17:48

+0

此外,我要比较的外键“执行过程中的错误来自表格“Precio”的“Producto”在where子句中使用newRows以从表格“Precio”中检索字段“Precio” – andrestoga 2011-05-02 12:35:25