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

Problema Substr Trigger

Estas en el tema de Problema Substr Trigger en el foro de PostgreSQL en Foros del Web. Cordial saludo Tengo la siguiente tabla: create table prueba(nombre char(4)); A esa tabla le hice un trigger BEFORE INSERT para hacerle un substr al campo ...
  #1 (permalink)  
Antiguo 16/03/2013, 10:39
Avatar de lucho2000  
Fecha de Ingreso: mayo-2012
Mensajes: 38
Antigüedad: 11 años, 10 meses
Puntos: 0
De acuerdo Problema Substr Trigger

Cordial saludo
Tengo la siguiente tabla:

create table prueba(nombre char(4));

A esa tabla le hice un trigger BEFORE INSERT para hacerle un substr al campo nombre:

CREATE OR REPLACE FUNCTION tr_before_prueba()
RETURNS trigger AS
$BODY$DECLARE
BEGIN
IF(TG_OP='INSERT') THEN
NEW.nombre = substr(NEW.nombre::text,0,3);
RETURN NEW;
END IF;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;


CREATE TRIGGER tr_before_prueba
BEFORE INSERT
ON prueba
FOR EACH ROW
EXECUTE PROCEDURE tr_before_prueba();


Pero al hacer un insert como el siguiente:
insert into prueba(nombre)values('colombiaaaaa');

Me genera el siguiente error:
ERROR: el valor es demasiado largo para el tipo character(4)

No entiendo por que no hace el substr del trigger

Muchas Gracias a quien pueda ayudarme.
  #2 (permalink)  
Antiguo 16/03/2013, 13:07
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 Substr Trigger

Cita:
No entiendo por que no hace el substr del trigger
Porque el error de longitud de datos se dispara siempre antes de que el trigger se ejecute.
Toda validación que se relacione con la estructura de la tabla, como por ejemplo NOT NULL, valores de FK, o longitud y rango de datos, son validaciones previas a los trigger. Siempre.
Un trigger no está pensado para validar datos, están pensados para realizar procesos con datos que ya son válidos.
El BEFORE representa el momento a escribir definitivamente el dato en la tabla, pero no significa que el dato no haya sido ya introducido en una estructura temporal, que obligatoriamente cumple con las restricciones de la tabla.
¿Se entiende la diferencia?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: as, substr, tabla, trigger, valor
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 04:15.