Bueno, volvamos al principio, para que se entienda claramente que tienes algunos inconvenientes básicos para crear el trigger, y están en tu diseño de datos...
Voy a suponer (siempre es bueno primero que nos describas qué es lo que quieres hacer, técnicamente), que lo que quieres es registrar la cantidad de envíos de un pedido dado, y los envíos se registran en una tabla separada a la que denominas "Envios".
Según dices en el primer post:
Cita: Buenas, necesito ayuda con este tema, quiero hacer un disparador para que me numere cada vez que se haga update y campo Status sea = "Enviado".
Un sistema que registre los envíos, para tener trazabilidad de los envíos, no debería
actualizar un registro, sino INSERTAR uno nuevo por cada envío.
Cita: campo idal es el campo que ha de numerarse, el valor inicial es 0000
la otra condición es (esto si es posible)
en el campo centro tengo valores desde T1 a Txx
Si el campo es alfanumérico, es decir que puede ir del "T1" al "T99" como dices,
no es posible usarlo para operaciones aritméticas, sencillamente porque no se pueden SUMAR valores numéricos a una cadena de texto. La parte de cadena daría cero en la conversión implícita, dejando solo el numero a sumar:
Código MySQL:
Ver originalmysql
> SELECT ('T01' + 2) resultado
;+-----------+
| resultado |
+-----------+
| 2 |
+-----------+
1 row
in set, 1 warning
(0.01 sec
)
y si sumas cadenas que contengan letras, devuelve cero:
Código MySQL:
Ver originalmysql
> SELECT ('T01' + 'T02') resultado
;+-----------+
| resultado |
+-----------+
| 0 |
+-----------+
Cita: quisiera que la numeración no solo fuese el siguiente numero sino por cada centro, si hay tres T1 con status=Enviado que numere del 1 al 3 , y si hay 8 status=Enviado en T9 que numere 1 al 8 (esto si se puede sino me conformo con una numeración correlativa)
SI lo que deseas es que numere los envíos del 1 al 9, por ejemplo, eso es posible siempre y cuando exista un valor por el que hacer la verificación. Por ejemplo lo que se puede hacer con el detalle de la factura, ya que existe un numero de factura identificable.
Pero eso casos se construyen programáticamente o bien por stored procedures.
En tu caso, al pretender hacer un TRIGGER, no puedes usar otros valores que los de la propia tabla y el propio registro que dispara el TRIGGER mismo. No se pueden pasar otros datos y por tanto dependerá de lo que tengas en ese registro.
Así, pues: Es posible hacer un trigger que (te recomiendo) INSERTE un registro en una tabla de envíos, para un pedido dado, y que estos se numeren incrementalmente. Lo que no podrás hacer es detener las inserciones si superas el numero, sin provocar un error que deberá devolver un mensaje que tu aplicación entienda, y en consecuencia deshaga el UPDATE que lo disparó...
¿Esto ultimo lo tienes claro?
Para tu meta, tendrás que trabajar con transacciones.
La idea base sería mas o menos esta:
Código MySQL:
Ver original SIGNAL SQLSTATE
VALUE '99999' SET MESSAGE_TEXT
= 'Cantidad de envios excedidos';
El ELSE se supone que disparará un error de ejecución si superas los nueve registros, por ejemplo.
Como podrás ver comparando tu codigo con el mío es que te has olvidado (o no has leido con cuidado el manual), las pseudovariables NEW y OLD, la seguda de las cuales no usamos en este caso, y tampoco te has fijado en cerrar el BEGIN. El END NO ESTABA.