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();

Responder a