Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Problema con trigger de la misma tabla

Estas en el tema de Problema con trigger de la misma tabla en el foro de Oracle en Foros del Web. Necesito un trigger para oracle g10 que se active al actualizar una tabla, y que dentro del trigger se haga una nueva actualización de la ...
  #1 (permalink)  
Antiguo 24/11/2012, 22:59
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Problema con trigger de la misma tabla

Necesito un trigger para oracle g10 que se active al actualizar una tabla, y que dentro del trigger se haga una nueva actualización de la tabla, lo que he intentado me da error de mutación de tablas


CREATE TABLE "USUARIO"
( "RUT" VARCHAR2(50) NOT NULL ENABLE,
"NOMBRES" VARCHAR2(100),
"APELLIDOS" VARCHAR2(200),
"DIRECCION" VARCHAR2(200),
"TELEFONO" VARCHAR2(10),
"CLASE" VARCHAR2(10),
"NUM_LIBROS_PEDIDOS" NUMBER(*,0),
CONSTRAINT "PK_CLIENTE" PRIMARY KEY ("RUT") ENABLE
);


la idea es que cuando yo haga un update aumentando el numero de libros pedidos, la clase puede que cambie, ya que depende del rango de libros pedidos entonces mi trigger debe hacer un update de la misma tabla, y es ahi donde me tira el error de mutacion de la tabla.

Si los libros son <10 Tipo A
si es 10<x<20 Tipo B
  #2 (permalink)  
Antiguo 25/11/2012, 06:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con trigger de la misma tabla

Francamente, tengo mis dudas que Oracle te permita realizar esa tarea...
Piensa que estás intentando invocar sobre la tabla una consulta (UPDATE) que es la misma que ya ha disparado elTRIGGER, por lo que la consecuencia lógica sería que el TRIGGER en ejecución se dispare de nuevo generando un UPDATE, que a su vez dispare el TRIGGER, generando un UPDATE....
¿Entiendes el problema?
Si se analiza en esa forma, generarías un loop infinito, por eso Oracle no lo permite.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/11/2012, 09:18
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema con trigger de la misma tabla

No tengo como probar en este momento, pero creo que algo asi soluciona tu problema
Código SQL:
Ver original
  1. CREATE OR REPLACE TRIGGER TRG_EJEMPLO
  2. BEFORE UPDATE OF NUM_LIBROS_PEDIDOS ON USUARIO
  3. FOR EACH ROW
  4. BEGIN
  5. IF :NEW.NUM_LIBROS_PEDIDOS < 10 THEN
  6.   :NEW.CLASE := 'A';
  7. ELSIF :NEW.NUM_LIBROS_PEDIDOS BETWEEN 10 AND 20 THEN
  8.   :NEW.CLASE := 'B';
  9. ELSE
  10.   :NEW.CLASE := 'C';
  11. END IF;
  12. END;

Si esto no te funciona, busca información de COMPOUND TRIGGERS.
Con los triggers simples siempre te va a dar problemas de tablas mutantes.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 25/11/2012, 12:19
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 12 años, 10 meses
Puntos: 15
Respuesta: Problema con trigger de la misma tabla

Muchas gracias algo asi habia leido pero no les funciono nunca, tambien lei sobre crear algunos package pararetener variables globales, intentare con tu codigo

Etiquetas: tabla, trigger, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:10.