|
Este es el codigo del trigger:
CREATE OR REPLACE TRIGGER TRG_PCDE_H AFTER UPDATE ON CT_PC_DE REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE v_id_raiz NUMBER; v_parametro varchar2(100); v_valor varchar2(300); v_usuario varchar2(8); v_fecha date; v_val_old varchar2(200); v_val_new varchar2(200); v_val_fecha_old date; v_val_fecha_new date; v_cont number:=0; v_temp number; cursor c_temp is select column_name from user_tab_columns where table_name = 'CT_PC_DE'; type cur_typ is ref cursor; c_ref_temp cur_typ; v_sql varchar2(200); v_bind char(1); prueba varchar2(50); temp CT_PC_DE%rowtype; BEGIN v_id_raiz:= :new.idraiz; select count(idraiz) into v_cont from ct_creartexto where idraiz=v_id_raiz; if(v_cont=0) then INSERT INTO CT_CREARTEXTO (IDRAIZ) VALUES(v_id_raiz); end if; v_id_raiz:= :OLD.idraiz; --prueba:=':old.'||'idraiz'; --select :old.fecha into v_val_old from dual; --execute immediate 'select from dual' into v_id_raiz ; --select sysdate into v_fecha from dual; for c in c_temp loop v_parametro:=c.column_name; if((v_parametro<>'fecha') or (v_parametro<>'FECHA')) then v_sql:='select :old.'||v_parametro||' from dual'; execute immediate v_sql into v_val_old; --v_sql:= 'select :new.'||v_parametro||' from dual'; --execute immediate v_sql into v_val_new; else v_sql:='select :old.'||v_parametro||' from dual'; --execute immediate v_sql into v_val_fecha_old; --v_sql:= 'select :new.'||v_parametro||' from dual'; --execute immediate v_sql into v_val_fecha_new; end if; end loop; END TRG_PCDE_H;
Y este es el error
ORA-01008: no todas las variables han sido enlazadas ORA-06512: en "DICCCT.TRG_PCDE_H", línea 43 ORA-04088: error durante la ejecución del disparador 'DICCCT.TRG_PCDE_H'
Yo se porque da ese error.Lo que necesito saber es si existe alguna forma de especificarle al execute immediate que no trate a la variable :old como una bind variable.
|
|
|