Hola a todos, estoy tratando de hace una función que ponga a mayúsculas todos los campos varchar de un tabla, esta función se activa con un trigger en la tabla. Pero hay algo que esta mal, abajo les copio la definición de mi función, el trigger y una tabla. Muchas Gracias.
CREATE OR REPLACE FUNCTION sbs.tg_upper_att() RETURNS trigger AS $BODY$ DECLARE R_COL RECORD; COLUMN VARCHAR(150); BEGIN FOR R_COL IN ( --Busco todos las columnas VARCHAR para la tabla que llamo a la funcion. SELECT AT.ATTNAME FROM PG_ATTRIBUTE AT, PG_TYPE TY, PG_CLASS CL WHERE AT.ATTTYPID = TY.OID AND AT.ATTRELID = CL.OID AND AT.ATTNUM >= 0 AND CL.RELNAME = TG_TABLE_NAME AND TY.TYPNAME = 'varchar' ) LOOP --Para cada fila recuperada optengo NEW.NOMBRE_DE_LA_COLUMNA COLUMN:='NEW.'||R_COL.ATTNAME; --Pongo en mayuscula la columna COLUMN:=UPPER(COLUMN); END LOOP; RETURN NEW; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; CREATE TABLE sbs.paises ( pais_codigo character varying(2) NOT NULL, pais_descripcion character varying(50) NOT NULL, CONSTRAINT paises_pkey PRIMARY KEY (pais_codigo), CONSTRAINT paises_pais_descripcion_key UNIQUE (pais_descripcion) ); CREATE TRIGGER "01UPPERVAR" BEFORE INSERT OR UPDATE ON sbs.paises FOR EACH ROW EXECUTE PROCEDURE sbs.tg_upper_att();