Oracle - Ayuda en trigger

 
Vista:

Ayuda en trigger

Publicado por christian (13 intervenciones) el 03/07/2007 20:27:26
hola wey tengo un problema con un trigger quiero actualizar una misma tabla pero me bota error que puedo hacer ..
estas son mi tablas:
CREATE TABLE CABECERAFACTURA(
NUMERO CHAR(5) CONSTRAINT CAB_NUM_PK PRIMARY KEY,
FECHA DATE,
CLIENTE CHAR(25) CONSTRAINT CAB_CLI_NN NOT NULL,
DIRECCION CHAR(25) ,
SUB_TOTAL NUMBER(6,2),
IGV NUMBER(6,2),
TOTAL NUMBER(6,2)
)
CREATE TABLE DETALLEFACTURA(
NUMERO CHAR(5),
COD_PRODUCTO CHAR(5),
PRODUCTO CHAR(25) CONSTRAINT DET_PRO_NN NOT NULL,
CANTIDAD NUMBER(4),
PRECIO_UNITARIO NUMBER(6,2),
SUB_TOTAL NUMBER(6,2),
CONSTRAINT DET_COD_PK PRIMARY KEY (NUMERO,COD_PRODUCTO)
)
este es mi trigger de actulizacion de la tabla detallefactura
CREATE OR REPLACE TRIGGER lolo
after update on detallefactura
FOR EACH ROW
BEGIN
UPDATE detallefactura SET sub_total = cantidad * precio_unitario;
END;

la consulta que hago es :
update detallefactura set cantidad=8

y sale este error:
ORA-04091: la tabla FACTURACION.DETALLEFACTURA está mutando, puede que el disparador/la función no puedan verla
ORA-06512: en “FACTURACION.LOLO”, línea 2
ORA-04088: error durante la ejecución del disparador ‘FACTURACION.LOLO’

necesitari aun ayuddita bueno graxias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda en trigger

Publicado por Rodolfo Reyes (445 intervenciones) el 03/07/2007 21:42:48
El error de Mutating table, lo da siempre que dentro de un trigger haces un insert, delete o update sobre la tabla que esta creado el triger.

Ejemplo:

Creas un triger para la tabla EMPLEADO y en el codigo del trigger haces un UPDATE sobre la tabla EMPLEADO. Al dispararse el trigger dare el error de mutating table.

Lamentablemente no existe un forma sencilla de solucionar este problema. Existen varias soluciones, pero siempre que me he topado con este problema, trato de modificar la logina, para hacer los procesos de otra forma.

Por ejemplo en tu caso, no es necesario que hagas un update, se me ocurre que los puedes resolver de la siguiente manera:

CREATE OR REPLACE TRIGGER lolo
after update on detallefactura REFERENCING OLD AS O NEW AS N
FOR EACH ROW
BEGIN
:N.sub_total = :N.cantidad * :N.precio_unitario;
END;

Con lo anterior haces lo mismo, pero sin la necesidad de utilizar un update.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

reayuda en trigger

Publicado por christian (13 intervenciones) el 04/07/2007 05:16:43
Hola tio graxias por la ayuda pero ese codigo que me mandastes bota un error:


CREATE OR REPLACE TRIGGER lolo
after update on detallefactura REFERENCING OLD AS O NEW AS N
FOR EACH ROW
BEGIN
:N.sub_total = :N.cantidad * :N.precio_unitario;
END;

ERROR en línea 2: PLS-00103: Se ha encontrado el símbolo "=" cuando se esperaba uno de los siguientes:

:= . ( @ % ; indicator

bueno el oracle que uso es el oracle 10g espero que me puedas ayudar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:reayuda en trigger

Publicado por Rodolfo Reyes (445 intervenciones) el 04/07/2007 17:06:23
Se me olvido poner los dos puntos antes del igual

:N.sub_total : = :N.cantidad * :N.precio_unitario;

Prueba con eso y me cuentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

nada tio en trigger

Publicado por christian (13 intervenciones) el 04/07/2007 17:26:18
hola tio ...puse tu codigo pero nada

y me sale este error.

ORA-04084: no se pueden cambiar los valores NEW para este tipo de disparador

OTRA SOLUCION QUE ME PUEDAS BRINDAR ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:nada tio en trigger

Publicado por christian (13 intervenciones) el 04/07/2007 17:28:18
PUSE TU CODIGO Y NADA SALE ERROR TIO..

CREATE OR REPLACE TRIGGER lolo
after update on detallefactura REFERENCING OLD AS O NEW AS N
FOR EACH ROW
BEGIN
:N.sub_total : = :N.cantidad * :N.precio_unitario;
END;

HABER SI BRINDAS OTRA IDEA DE COMOI RESOLVER ESTO TIO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:nada tio en trigger

Publicado por Rodolfo Reyes (445 intervenciones) el 05/07/2007 17:57:02
Prueba con este y me cuentas como te fue:

CREATE OR REPLACE TRIGGER "LALA" BEFORE
UPDATE OF "CANTIDAD", "PRECIO_UNITARIO" ON "DETALLEFACTURA" REFERENCING OLD AS O NEW AS N FOR EACH ROW
BEGIN
:N.sub_total := :N.cantidad * :N.precio_unitario;
END;
/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda en trigger

Publicado por christian (13 intervenciones) el 04/07/2007 16:52:57
hla k tal ps puse ese codigo y me boto error cuando ejecute:

ERROR en línea 2: PLS-00103: Se ha encontrado el símbolo "=" cuando se esperaba uno de los siguientes:

:= . ( @ % ; indicator

y mi consulta es la siguientes es:
update detallefactura set cantidad=15 where numero='12345' and cod_producto='PR001'

haber si me das otra solucion estoy que intento nada nada

graxias por tu time ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar