Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-05-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Sobre el mensaje de error "during execution of trigger"

Porque este triger no funciona. Hay errores.

Código SQL [-]
CREATE OR REPLACE TRIGGER ATUALIZA_PROD_PRECO
AFTER UPDATE OR INSERT ON TB_PC_PRODUTO
FOR EACH ROW
DECLARE
 COD INTEGER;
BEGIN
  UPDATE TB_PC_PRODUTO SET VALOR = 5.98;
END;
/

Este es el error.

Código SQL [-]
ORA-04091: table DESENVOLVIMENTO.TB_PC_PRODUTO is mutating, trigger/function may not see it
ORA-06512: at "DESENVOLVIMENTO.ATUALIZA_PROD_PRECO", line 4
ORA-04088: error during execution of trigger 'DESENVOLVIMENTO.ATUALIZA_PROD_PRECO'
ORA-06512: at "DESENVOLVIMENTO.ATUALIZA_PROD", line 24
ORA-06512: at line 1
Responder Con Cita
  #2  
Antiguo 29-05-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Existe muchisima documentación sobre las tablas mutantes, en el portal de desarrolladores de oracle encontrarás información al respecto.

Sobre tu triger.

La lógica es errónea, no puedes crear un triguer que se ejecute cuando una tabla se actualiza a si misma.

Si analizas un poco lo que provoca tu triger te darás cuenta que es erroneo:

al modificar una fila en TB_PC_PRODUTO

se actualiza la tabla TB_PC_PRODUTO estableciendo VALOR = 5.98

como se modificó la tabla TB_PC_PRODUTO vuelve a ejecutarse el triger

y así sucesivamente en un ciclo infinito.

Saludos.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 29-05-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Ola, pero yo hizo asi y viene el mismo error. Esta fue otra tentativa da hacer para ver si funciona o no. Abajo como estas ahora.

Código SQL [-]
CREATE OR REPLACE TRIGGER ATUALIZA_PROD_PRECO_CLIE
AFTER UPDATE OR INSERT ON TB_PC_CLIENTE
FOR EACH ROW

BEGIN
  UPDATE TB_PC_PRODUTO SET VALOR = 5.98;
  
END;
/
Responder Con Cita
  #4  
Antiguo 29-05-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
:P el problema tiene que ver con la mutación de las tablas,

Mientras estás realizando operaciones en una transacción que involucra ambas tablas (un bloque de código en un SP), se ejecuta el trigger, como la transacción no ha sido confirmada oracle considera que la tabla está mutando. Ello genera el error. Analiza bien la lógica de la operación que realizas, probablemente no sea necesario un trigger. y puedas realizar la operación en el mismo bloque.

Saludos
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #5  
Antiguo 29-05-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Esto es un aprendizado. Yo apender a escribir trigger. Se que puedo hacer de otra forma, pero mi gustaria de hacer con trigers, pues no lo conozco bien la PL/SQL y quiero aprender. Solo esto.
Responder Con Cita
  #6  
Antiguo 07-06-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por Paulao Ver Mensaje
Esto es un aprendizado. Yo apender a escribir trigger. Se que puedo hacer de otra forma, pero mi gustaria de hacer con trigers, pues no lo conozco bien la PL/SQL y quiero aprender. Solo esto.

El triguer está bien. lo que no es correcto es la lógica que implementas.

, suerte y aca andamos para ayudarte
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Fatal error: Maximum execution time of 60 seconds exceeded in dbtables.inc.php sakuragi PHP 11 02-08-2007 19:39:52
error EMS firebird interbase "Unsuccessful execution caused by unavailable resource" JuanErasmo Conexión con bases de datos 3 10-02-2006 22:09:53
mensaje trigger ronson Conexión con bases de datos 3 04-03-2004 09:45:18
Duda Sobre trigger DANIELMW Firebird e Interbase 3 29-01-2004 23:31:48


La franja horaria es GMT +2. Ahora son las 14:33:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi