7 messages in com.mysql.lists.mysql-esRe: Triggers| From | Sent On | Attachments |
|---|---|---|
| Luciano A.F. | 18 Oct 2007 15:32 | |
| Mario Benavides Jurado | 19 Oct 2007 08:40 | |
| Paul Gallegos | 26 Oct 2007 17:24 | |
| Mario Benavides Jurado | 28 Oct 2007 10:42 | |
| Paul Gallegos | 28 Oct 2007 18:28 | |
| Ariel Nardelli | 31 Oct 2007 11:40 | |
| Mario Benavides Jurado | 31 Oct 2007 12:34 |
| Subject: | Re: Triggers![]() |
|---|---|
| From: | Mario Benavides Jurado (mari...@yahoo.com) |
| Date: | 10/31/2007 12:34:29 PM |
| List: | com.mysql.lists.mysql-es |
Hola amigo saludos desde colombia,
Lo que tu deseas se puede hacer con procedimientos almacenados y con triggers si
asi lo deseas (en ocasiones uso triggers para llamar procedimientos), te
recomiendo las siguientes lecturas que te daran buenas ideas, luego los ejemplos
los adaptas a tus necesidades:
http://sentidoweb.com/2007/06/20/laboratorio-triggers-y-procedimientos-almacenados-en-mysql.php
http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html
http://dev.mysql.com/tech-resources/articles/mysql-storedproc.html
Espero te sirva la informacion.
PD. la proxima te doy un ejemplo propio, ahora estoy en mi trabajo y no me queda
tiempo......
Exitos y hasta la proxima.
Mario Benavides Jurado Administrador de Sistemas Informaticos Desarrollador LAMP Email: cor...@mariobj.com Web-Site: www.mariobj.com
Que seria de nosotros, sin la ayuda de lo que no existe? Paul Valery - Breve Epistola sobre el Mito
----- Original Message ---- From: Ariel Nardelli <mysq...@panflin.com.ar> To: mysq...@lists.mysql.com Sent: Wednesday, October 31, 2007 1:40:25 PM Subject: Triggers
Hola!
Me animo a hacer esta pregunta que realmente me viende dando vueltas desde hace bastante tiempo y me dijieron que se puede hacer por procedimientos almacenados y que mejoraria muchisimo la velocidad, por eso les pregunto a los listeros si puedo hacer un procedimiento almacenado y si realmente mejoraria mi velocidad.
Al grano... Tengo que hacer el cierre mensual de las cuentas corrientes, para eso tengo que leer un grupo de registros y sumar los datos, exactamente lo que actualmente hago es:
Busco el saldo de inicio del periodio del cliente... SELECT ctc_impo FROM ctascli where ctc_modo=1 ctc_peri = '200710' and
ctc_ncli = 10'
Sumo todos los debes... SELECT sum(ctc_impo) FROM ctascli where ctc_modo=2 ctc_peri = '200710'
and ctc_ncli = 10'
Sumo todos los haber... SELECT sum(ctc_impo) FROM ctascli where ctc_modo=3 ctc_peri = '200710'
and ctc_ncli = 10'
Despues hago la suma para sacar el nuevo saldo o sea saldo anterior + debes - haber = nuevo saldo
Y grabo ese saldo como apertura del periodo sigiente, en esencia hago eso eso cliente por cliente......
Para acelerar eso, se puede hacer un procedimiento almacenado? y como se haria??
Gracias! Ariel
SELECT SUM( IF( ctc_modo=1 , ctc_impo, 0 ) ), SUM( IF( ctc_modo=2 , ctc_impo, 0 ) ), SUM( IF( ctc_modo=3 , ctc_impo, 0 ) ) FROM ctascli where ctc_peri = %s and ctc_ncli = %s',[tc_peri,k[0]])
Paul Gallegos wrote:
Primeramente mi idea no era la de cofundir a nadie, y si respondi a
la consulta es porque sé de lo que estoy hablando, se que los triggers son procedimientos que se ejecutan de forma implicita en la BD segun ciertas condiciones, el ejemplo que tu expones, es muy simple, ya que funciona perfectamente, pero ahora basemonos en tu ejemplo, veo que al actualizar un monto menor a cero, lo que hace es poner el monto en 0 verdad??? OK todo bien, pero que pasa si en lugar de eso queremos enviar un mensaje de error del tipo: "ERROR: El monto no puede ser igual a 0" y seguidamente se cancele la actualización sin hacer ninguna modificación en la tabla account.
AHHHHHH ???? PLOP :P
Cuando respondo en la lista, es porque sé de lo que hablo y jamás
tendría la intención de confundir a nadie, entonces mariobenavidesj dejo la interrogante para que respondas como harías lo expuesto en MySQL. Esto lo digo ya que estudié los triggers en PostgreSQL, FirebirdSQL y MySQL, y este último no tiene manejo de errores personalizados para los triggers, al estilo de PostgreSQL, FirebirdSQL y Oracle.
Espero no haber "confundido" a nadie.
Buenas Tardes.
Atte: Paul Rubén Gallegos PeraltaIngeniero de Ejecución en Computación e Informática.Cel: 9350...@hotmail.com
se puede hacer, siento mucho decirle que se equivoca. El verdadero proposito de los triggers consiste en evaluar condiciones antes o despues de las operaciones CRUD para ejecutarlas. Eso incluye comparaciones multiples, sentencias anidadas... y un sin numero de opciones. Y aqui tienen un ejemplo para que no digan que en mysql no se puede pero si en firebird...... ahora la manera en que interpretas el uso del trigger esta mal, el trigger no se cancela. lo que se hace es ejecutar una operacion sobre uno o muchos registros. Y el trigger permite decidir si ejecutas o no una operacion CRUD. HAY QUE TENER CLAROS LOS CONCEPTOS. Aqui tienen un ejemplo:
mysql> delimiter // mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account -> FOR EACH ROW -> BEGIN -> IF NEW.amount < 0 THEN -> SET NEW.amount = 0; -> ELSEIF NEW.amount > 100 THEN -> SET NEW.amount = 100; -> END IF; -> END;// mysql> delimiter ;
Quedo claro no ??
Entonces, en mysql es posible evaluar condiciones para los triggers y si quieres hacer cosas mas complejas usa entonces procedimientos almacenados y funciones.
Un consejo a los listeros: si no saben no respondan, pues confunden a la gente que quiere aprender!
Mario Benavides Jurado Administrador de Sistemas Informaticos Desarrollador LAMP Email: cor...@mariobj.com Web-Site: www.mariobj.com
Que seria de nosotros, sin la ayuda de lo que no existe? Paul Valery - Breve Epistola sobre el Mito
__________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
_________________________________________________________________ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
__________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com




