La Web del Programador: Comunidad de Programadores
 
    Pregunta:  63949 - ORALCE NOMBRE DE COLUMNAS Y DATOS
Autor:  ROBERTO MEJIA
TENGO UNA CONSULTA:
DATOS DE LA ESTRUCTURA DE LA TABLA
-------------------------------------------------------
Column_id Column_name Data_type
-------------------------------------------------------
1 Nombre char
2 Apellido char
3 Direccion char
4 Telefono char
5 Fecha date
DATOS DE LA TABLA
------------------------------------------------------------------------
Nombre Apellido Direccion Telefono Fecha
------------------------------------------------------------------------
Juan Perez San Salvador 2610-2121 01/01/2010
La consulta es de que manera puedo realizar un trigger que pueda concatenar en un solo string (para Insertar/Actualizar) en el cual
me arme los datos dinamicamente el nombre del campo+el contenido del campo asi:
Nombre: Juan Apellido: Perez Direccion: San Salvador Telefono: 2610-2121 Fecha:01/01/2010

Todo esto para poderlo enviar a una tabla de traza de auditoria, tome un ejemplo pero no me funciona:
CREATE OR REPLACE TRIGGER "ESQUEMA_PRUEBA"."CREACION" BEFORE
INSERT ON "TABLA_PRUEBA" FOR EACH ROW
declare
n_traza number;
oldval varchar(2000);
newval varchar(1000);
begin
SELECT sysdate INTO :new.fecha_creacion FROM dual;
select SEC_AUDITORIA.nextval into n_traza from dual;
for row in (SELECT column_name from user_tab_columns where table_name='TABLA_PRUEBA') loop
execute immediate 'select :old.'||row.column_name||' from dual' into oldval;
execute immediate 'select :new.'||row.column_name||' from dual' into newval;
end loop;
insert into traza_auditoria (id_traza,usuario,fecha,operacion,datos)
values(99,:new.usuario_creacion,:new.fecha_creacion,'INSERCIÓN',newval);
end;
Gracias

  Respuesta:  Lester
Hola, prueba asi:

CREATE OR REPLACE TRIGGER NOMBRE_TRIGGER Before INSERT OR UPDATE ON TABLA FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO TABLA(LA TABLA DEBE TENER UN SOLO CAMPO VARCHAR2(1000)) VALUES('Nombre:'||' '||:NEW.NOMBRE||' '||
'Apellido:'||' '||:NEW.APELLIDO||' '||
'Direccion:'||' '||:NEW.DIRECCION||' '||
'Telefono:'||' '||:NEW.TELEFONO||' '||
'Fcha:'||' '||SYSDATE);
ELSE
INSERT INTO TABLA(LA TABLA DEBE TENER UN SOLO CAMPO VARCHAR2(1000)) VALUES('Nombre:'||' '||:OLD.NOMBRE||' '||
'Apellido:'||' '||:OLD.APELLIDO||' '||
'Direccion:'||' '||:OLD.DIRECCION||' '||
'Telefono:'||' '||:OLD.TELEFONO||' '||
'Fcha:'||' '||SYSDATE);
END IF;
END;
/