Mutating tables
me da error de mutating tables al hacer un
insert into grprec values(1,1)
el trigger es el siguiente
CREATE OR REPLACE TRIGGER GRPREC_INSERT
AFTER INSERT
ON GrpRec
FOR EACH ROW
DECLARE
StoO_selcnt INTEGER;StoO_error INTEGER;StoO_rowcnt INTEGER := 1;
StoO_crowcnt INTEGER := 0;StoO_fetchstatus INTEGER := 0;
StoO_errmsg VARCHAR2(255);StoO_sqlstatus INTEGER;
idGrupo NUMBER(10,0);idUsuario NUMBER(10,0);
tempVar1 NUMBER :=2;tempVar2 NUMBER :=3;
tempVar3 NUMBER :=4;tempVar4 NUMBER :=5;
BEGIN
FOR rec IN ( SELECT :NEW.idGrupo tmpAlias1 FROM DUAL)
LOOP
idGrupo := rec.tmpAlias1 ;
END LOOP;
FOR rec IN ( SELECT :NEW.idUsuario tmpAlias1
FROM DUAL)
LOOP
idUsuario := rec.tmpAlias1 ;
END LOOP;
...
...
END GRPREC_INSERT;
/
COMO PUEDO SOLUCIONARLO??
insert into grprec values(1,1)
el trigger es el siguiente
CREATE OR REPLACE TRIGGER GRPREC_INSERT
AFTER INSERT
ON GrpRec
FOR EACH ROW
DECLARE
StoO_selcnt INTEGER;StoO_error INTEGER;StoO_rowcnt INTEGER := 1;
StoO_crowcnt INTEGER := 0;StoO_fetchstatus INTEGER := 0;
StoO_errmsg VARCHAR2(255);StoO_sqlstatus INTEGER;
idGrupo NUMBER(10,0);idUsuario NUMBER(10,0);
tempVar1 NUMBER :=2;tempVar2 NUMBER :=3;
tempVar3 NUMBER :=4;tempVar4 NUMBER :=5;
BEGIN
FOR rec IN ( SELECT :NEW.idGrupo tmpAlias1 FROM DUAL)
LOOP
idGrupo := rec.tmpAlias1 ;
END LOOP;
FOR rec IN ( SELECT :NEW.idUsuario tmpAlias1
FROM DUAL)
LOOP
idUsuario := rec.tmpAlias1 ;
END LOOP;
...
...
END GRPREC_INSERT;
/
COMO PUEDO SOLUCIONARLO??
Hola, el problema que estás teniendo es que accedes a la misma tabla sobre la que está hecha el trigger.
Hazte una tabla con la misma estructura llamada GrpRec_temp y haz el INSERT ahÃ, verás cómo te funciona.
Si encuentras otra solución escrÃbelo aquÃ. Yo estoy teniendo el mismo problema con un TRIGGER y es lo que se me ha ocurrido.
_______________________________
David Lozano
http://www.thehouseofblogs.com
Hazte una tabla con la misma estructura llamada GrpRec_temp y haz el INSERT ahÃ, verás cómo te funciona.
Si encuentras otra solución escrÃbelo aquÃ. Yo estoy teniendo el mismo problema con un TRIGGER y es lo que se me ha ocurrido.
_______________________________
David Lozano
http://www.thehouseofblogs.com
Como inventor no tienes precio, chaval.
¿ para que montas es cursor si el valor ya le tienes ?
El trigger se te dispara UNA VEZ POR CADA INSERT, si insertas 100 filas de una vez, se te dispara 100 veces.
¿ no serÃa mas facil esto ? :
idgrupo := :new.idgrupo
Explica mejor que es lo que quieres hacer ( Aparte de una paja mental )
¿ para que montas es cursor si el valor ya le tienes ?
El trigger se te dispara UNA VEZ POR CADA INSERT, si insertas 100 filas de una vez, se te dispara 100 veces.
¿ no serÃa mas facil esto ? :
idgrupo := :new.idgrupo
Explica mejor que es lo que quieres hacer ( Aparte de una paja mental )
Digo yo que lo estará haciendo con un asistente del Toad o algo asÃ.
Aún asà le seguirÃa dando el error de mutating table
Aún asà le seguirÃa dando el error de mutating table
Que estoy viendo que lo que quieres es modificar la misma lÃnea que estás insertando.
DeberÃas probar algo más simple como esto:
(un ejemplo para que pases a minúsculas antes de insertar)
CREATE OR REPLACE TRIGGER AMINUSCULAS
BEFORE INSERT OR UPDATE
ON tutabla
FOR EACH ROW
BEGIN
:new.columnaamodificar := LOWER(:new.columnaamodificar);
END;
_______________________________
David Lozano
http://www.davidlozanolucas.com
DeberÃas probar algo más simple como esto:
(un ejemplo para que pases a minúsculas antes de insertar)
CREATE OR REPLACE TRIGGER AMINUSCULAS
BEFORE INSERT OR UPDATE
ON tutabla
FOR EACH ROW
BEGIN
:new.columnaamodificar := LOWER(:new.columnaamodificar);
END;
_______________________________
David Lozano
http://www.davidlozanolucas.com
