2011-05-02 82 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