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

como hacer exception en trigger??? phpmyadmin, excepciones

Estas en el tema de como hacer exception en trigger??? phpmyadmin, excepciones en el foro de Mysql en Foros del Web. hola, llevo un rato buscando por internet y por el foro y no encuentro nada, COMO HAGO UN EXCEPTION EN UN TRIGGER??? lo único que ...
  #1 (permalink)  
Antiguo 26/08/2009, 10:48
 
Fecha de Ingreso: abril-2009
Mensajes: 41
Antigüedad: 11 años, 1 mes
Puntos: 0
como hacer exception en trigger??? phpmyadmin, excepciones

hola,
llevo un rato buscando por internet y por el foro y no encuentro nada,

COMO HAGO UN EXCEPTION EN UN TRIGGER???

lo único que quiero que haga esque si entra en un if en el trigger, no inserte y devuelva un mensaje.

esto es lo que tengo:

delimiter &&
CREATE TRIGGER rango before INSERT ON nivel
FOR each ROW
BEGIN
if (new.min_anos>=min_anos and new.min_anos<max_anos )
OR ( new.max_anos>min_anos and new.max_anos<=max_anos )
OR ( new.max_anos>max.anos and new.min_anos<max.anos )
then
RAISE EXCEPTION "PETA LOS RANGOOOOOOOOOOOOOOOOS"; ¿¿¿CORRECTO???
end if;
END ;
  #2 (permalink)  
Antiguo 26/08/2009, 12:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 11 años, 3 meses
Puntos: 360
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

No creo que esto sea posible.
lo digo por la definición de los triggers.

Un trigger se ejecuta antes o despues de un evento. No se pude arrepentir validando desde el mismo trigger cuando este ya se ha disparado.

Esta validación debes hacerla desde una función.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 26/08/2009, 13:18
 
Fecha de Ingreso: abril-2009
Mensajes: 41
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

pero por ejemplo si tengo una tabla con rango de edades:
1 | 3
5 | 7

y quiero insertar 0 y 2, que me devuelva error o mensaje,

se puede hacer con un trigger?
  #4 (permalink)  
Antiguo 26/08/2009, 13:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 11 años, 3 meses
Puntos: 360
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

Para eso que tratas de hacer, en vez de utilizar un trigger utiliza una función.

Dentro de la función puedes validar lo que quieres. El uso que tratas de darle a los triggers no es el adecuado y no creo que haya forma de hacerlo así.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 27/08/2009, 03:00
 
Fecha de Ingreso: abril-2009
Mensajes: 41
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

pues es una putada,
pq en una práctica que tengo que entregar para la universidad tengo que hacerlo ¿?
debe haber una manera ya que mis compañeros entregaron la práctica pero esta hecha con firebird y yo la hago con phpmyadmin.

última oportunidad, alguien sabe algo o como hacer algo parecido?

Gracias

Última edición por almirante; 27/08/2009 a las 05:11
  #6 (permalink)  
Antiguo 27/08/2009, 05:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 12 años, 5 meses
Puntos: 2656
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

Cita:
Iniciado por almirante Ver Mensaje
hola,
llevo un rato buscando por internet y por el foro y no encuentro nada,

COMO HAGO UN EXCEPTION EN UN TRIGGER???

lo único que quiero que haga esque si entra en un if en el trigger, no inserte y devuelva un mensaje.

esto es lo que tengo:

delimiter &&
CREATE TRIGGER rango before INSERT ON nivel
FOR each ROW
BEGIN
if (new.min_anos>=min_anos and new.min_anos<max_anos )
OR ( new.max_anos>min_anos and new.max_anos<=max_anos )
OR ( new.max_anos>max.anos and new.min_anos<max.anos )
then
RAISE EXCEPTION "PETA LOS RANGOOOOOOOOOOOOOOOOS"; ¿¿¿CORRECTO???
end if;
END ;
Vamos por partes:
1. Una Exception es en definitiva un ERROR, y es la denominación que se le da en lenguajes de programación de aplicaciones. No en SQL. En MySQL, al menos en SP, Trigger o Functions se denominan Error.
2. Si se trata de producir un error, es simple. Si se trata de CONTROLAR un error, se debe recurrir a HANDLERs, que son los que permiten capturar estados de excepción (SQLSTATE) o error en los scripts (no en las sentencias manuales o enviadas por aplicaciones).
3. Un TRIGGER es un procedimiento que se dispara antes uno de tres eventos (inserción, actualización o borrado) que se realiza contra una tabla. Sólo existe en tanto la sentencia se ejecuta y no devuelve datos o mensajes.
4. Como los trigger operan sobre datos entrantes, eso significa que solamente tienen por entrada de datos los valores del registro, el actual o el nuevo, que produce el evento. Eso significa que no no puede recibir valores extraños a la tabla, ni parámetros adicionales, porque la primera validación que hace es a nivel de restricciones de tabla (valores, campos, tipos, etc).
5. Los trigger no pueden realizar tareas contra su propia tabla ni contra tablas cuyos trigger generen eventos contra su tabla (circularidad).

Dicho esto, existen tres formas de encarar tu problema, al menos hasta lo que yo entiendo:
1) Variables de usuario a nivel base de datos.
2) Tablas de transacción.
3) Stored procedures invocados en el trigger.

Las variables de usuario se definen con su propia invocación. y permaneces "vivas" mientras la conexión exista,ya que existen en ella.
En esa forma, luego de ejecutar el trigger puedes consultar el estado de la variable. Según lo que contenga, será el estado:

Código sql:
Ver original
  1. DELIMITER&&
  2. CREATE TRIGGER rango BEFORE INSERT ON nivel
  3. FOR each ROW
  4. BEGIN
  5.   IF (NEW.min_anos>=@MAXIMO AND NEW.min_anos < @MINIMO )
  6.       OR ( NEW.max_anos>@MINIMO AND NEW.max_anos <= @MAXIMO )
  7.       OR ( NEW.max_anos>@MAXIMO AND NEW.min_anos < @MAXIMO )
  8.   THEN
  9.     SET @VARERROR = 'NO RESPETA LOS RANGOS';
  10.    END IF;
  11. END ;
  12. DELIMITER ;

Este ejemplo requiere que se carguen previamente las dos variables de comparación (@MAXIMO y @MINIMO), o de lo contrario los valores deberán ser constantes o comparados contra una tabla.

El segundo caso, requiere que se use una tabla adicional para guardar el estado de los errores:
Código sql:
Ver original
  1. DELIMITER&&
  2. CREATE TRIGGER rango BEFORE INSERT ON nivel
  3. FOR each ROW
  4. BEGIN
  5.   IF (NEW.min_anos>=@MAXIMO AND NEW.min_anos < @MINIMO )
  6.       OR ( NEW.max_anos>@MINIMO AND NEW.max_anos <= @MAXIMO )
  7.       OR ( NEW.max_anos>@MAXIMO AND NEW.min_anos < @MAXIMO )
  8.   THEN
  9.     /* puede tener o incluir más valores a almacenar. Eso dependerá de ti.*/
  10.     INSERT INTO ERRORES(MENSAJE) VALUES('NO RESPETA LOS RANGOS');
  11.    END IF;
  12. END ;
  13. DELIMITER ;

El tercer caso usa cualquiera de las dos variantes, pero programadas dentro de un SP que sea invocado por el TRIGGER.

En cualquier caso, el ejemplo que estás dando es irracional, porque esa validación no corresponde a una base de datos, sino que se debe realizar en la aplicación.
No hay que hacer que una base realice la tarea del programa que la usa.
Los triggers se idearon para otros usos, no para suplir la ociosidad de los programadores, por lo que el ejemplo de tu profesor carece de sentido si lo analizas bien.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 27/08/2009, 07:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 11 años, 3 meses
Puntos: 360
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

Cita:
pues es una putada,
pq en una práctica que tengo que entregar para la universidad tengo que hacerlo ¿?
debe haber una manera ya que mis compañeros entregaron la práctica pero esta hecha con firebird y yo la hago con phpmyadmin.
O no entendiste bien el trabajo, o tu profe es un petardo.

Cita:
última oportunidad, alguien sabe algo o como hacer algo parecido?
Por favor nadie mas opine.
almirante a dado una ultima oportunidad.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 28/08/2009, 17:43
 
Fecha de Ingreso: abril-2009
Mensajes: 41
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

pues no lo se,
yo no creo que lo haya entendido mal pq toda la clase lo ha hecho así,
que el profesor sea un petardo, puede ser xD

lo de última oportunidad lo digo pq estoy algo desesperado, si alguien quiere contestar más lo agradecere.

MUCHAS GRACIAS
gnzsoloyo --->(lo probare mnn)
huesos52
  #9 (permalink)  
Antiguo 28/08/2009, 17:50
 
Fecha de Ingreso: abril-2009
Mensajes: 41
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

y con una función o procedure puede lanzar un error?
se pueden ejecutar esa función o procedure desde un trigger?

eso solucionaría mi problema.
  #10 (permalink)  
Antiguo 29/08/2009, 06:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 12 años, 5 meses
Puntos: 2656
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

Cita:
Iniciado por almirante Ver Mensaje
y con una función o procedure puede lanzar un error?
se pueden ejecutar esa función o procedure desde un trigger?

eso solucionaría mi problema.
¿Qué es lo que debes hacer en definitiva?: ¿Producir un error o capturar un error y administrarlo?

¿Qué tipo de error debe ser? ¿Un error de MySQL, o un error según las restricciones de datos de una base específica?
El primer caso son en su mayoría errores de parseo, I/O, permisos y un largo etcétera, propio del DBMS.
Lo otro se generará como error de datos (datos truncados, error de tipo, etc.), y debes manejarlo en un SP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 29/08/2009 a las 06:35
  #11 (permalink)  
Antiguo 29/08/2009, 10:20
 
Fecha de Ingreso: abril-2009
Mensajes: 41
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

tengo una tabla con rango de edades:
1 | 3 ---->(1 a 3 años)
5 | 7 ---->(5 a 7 años)

y intento insertar de 0 a 2 o 6 a 8

pues que me diga que estoy violando los rango y que no llege a insertelo.
creo que esto es producir un error, no?

en otro lenguage no sería tan dificil, ¿?

GRACIAS!!!
  #12 (permalink)  
Antiguo 29/08/2009, 13:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 12 años, 5 meses
Puntos: 2656
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

Pues partiendo de esa base, ese tipo de cosas no se resuelve habitualmente en la base de datos sino en la validación de datos de las aplicaciones. Es decir, ese tipo de validaciones se hace a nivel de lenguaje de programación, y en el formulario de ingreso de dato... que nada tiene que ver con el SQL.
Si aún asi, quieres hacerlo en l abase de datos, debes realizarlo con un SP con un parámetro OUT.
¿Qioeres saber cómo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 05/09/2009, 09:10
 
Fecha de Ingreso: abril-2009
Mensajes: 41
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

si por favor, me harías un favor,
pq es lo que tengo que hacer.

pero lo que me interesaría es desde un trigger ejecutar ese SP, y claro que haga como un exception, quiero decir que si estas insertando algo, te lenza el mensaje y no haga inserte los valores.

Gracias!!!
  #14 (permalink)  
Antiguo 10/09/2009, 05:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 12 años, 5 meses
Puntos: 2656
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

Lo siento, he estado un poqkuitín atareado en estos últimos 20 días...
Esta tarde te pongo el ejemplo de lo que te decía. Tenme un poco de paciencia hoy.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 10/09/2009, 11:18
 
Fecha de Ingreso: abril-2009
Mensajes: 41
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: como hacer exception en trigger??? phpmyadmin, excepciones

genial!!!
muchas gracias!!!

mira, ahora mismo pongo esto:
Cita:
delimiter //
CREATE TRIGGER rango before INSERT ON Nivel
FOR each ROW
BEGIN


if (new.Min_anos<Max_anos )
then
call error_rango('YES');
end if;
END ;
me lo hacepta, pero luego cuando se ejecuta me dice que MAx_años no existe,

como puedo hacer para que me compare con todos los valores de la tabla?

gracias!
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 22:38.