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; / |