Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Help on Mutating

Help on Mutating

From: kelly <mekelly002_at_hotmail.com>
Date: Fri, 26 Mar 1999 12:46:07 -0500
Message-ID: <36FBC7DF.A4ACB8AB@hotmail.com>


Question as following:

From Oracle8 document:

     BEFORE ROW and AFTER ROW triggers fired by a single row INSERT to a table do

     not treat that table as mutating or constraining. Note that INSERT statements that may involve more than one row, such

     as INSERT INTO emp SELECT . . ., are not considered single row inserts, even if they only result in one row being

     inserted.

Create Table/Trigger

CREATE or replace TABLE PO_2 (

PO_ID               NUMBER (10)   NOT NULL,
DESCR_TXT           VARCHAR2(100) NOT NULL,
ADDR_ID_SHIP_TO     NUMBER (10)   NOT NULL,
ADDR_ID_BILL_TO     NUMBER (10)   NOT NULL,
CTCT_ID             NUMBER (10)   NOT NULL,
VENDOR_ID           NUMBER (10)   NOT NULL,
X_AMT               NUMBER (10,2) NOT NULL)

;

insert into po_2 values(1,'First POrder',111,222,3333,4444,0);

CREATE or replace TABLE PO_2_DTL (

PO_ID               NUMBER (10)   NOT NULL,
PO_DTL_ID           NUMBER (10)   NOT NULL,
ITEM_ID             NUMBER (10)   NOT NULL,
ORDR_QTY            NUMBER (10,2) NOT NULL,
ORDR_PRC            NUMBER (10,2) NOT NULL)

;

CREATE OR REPLACE TRIGGER AIU_PO_2_DTL
AFTER INSERT
ON PO_2_DTL
FOR EACH ROW DECLARE
    CURSOR C1 IS
    SELECT ORDR_QTY * ORDR_PRC X_AMT_PO_DTL     FROM PO_2_DTL
    WHERE PO_ID = :NEW.PO_ID;     X_AMT_PO_2 PO_2.X_AMT%TYPE := 0; BEGIN
    FOR C1_REC IN C1 LOOP
            X_AMT_PO_2 := X_AMT_PO_2 + C1_REC.X_AMT_PO_DTL;     END LOOP;
    UPDATE PO_2 SET X_AMT = X_AMT_PO_2 WHERE PO_ID = :NEW.PO_ID; END; Then I issued The following insert statement insert into po_2_dtl values(1,10,222,100,9.9);

But I got the following error. Oracle still treats trigger table as mutating table. Why?

error message:
SQLWKS> insert into po_2_dtl values(1,101,222,200,19.9); ORA-04091: table SCOTT.PO_2_DTL is mutating, trigger/function may not see it

ORA-06512: at "SCOTT.AIU_PO_2_DTL", line 3
ORA-06512: at "SCOTT.AIU_PO_2_DTL", line 10
ORA-04088: error during execution of trigger 'SCOTT.AIU_PO_2_DTL'

Thank you for help! Received on Fri Mar 26 1999 - 11:46:07 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US