InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
SQL
  Tutorial SQL
SQL Server
  Tutorial de Transact-SQL
ORACLE
  Tutorial PL/SQL
.NET
  Introducción a.NET
  Conceptos generales .NET
  Tutorial C#
  LinQ
  WCF
Reina Roja
  Humor
  Bibliografia
  Acerca de ...

Afiliados
La Web del programador
MundoProgramacion

SQL dinámico en TRIGGERS
tema iniciado porAlastor en ORACLE
Mensaje recibido el [03/10/2008 09:4:13]


Hola a todos

Tengo un problema con la ejecucion de un sql dinamico en un trigger.Necesito obtener el valor antiguo y nuevo de una de todos los campos de una tabla de la cual no conosco el nombre de sus campos,estos los obtengo con un cursor que los recupera del diccionario de datos.El problema esta a la hora de ejecutar la consulta para obtener el valor :old.||nombre_campo o :new.||nombre_campo(la consulta seria
'select :old.||nombre_campo from dual');utilizando execute immediate me da error y lo mismo ocurre si utilizo un ref cursor.Si alguien tiene idea de que pueda ser por favor respondanme.Si necesitan mas informacion podria ponerle algun fragmento el codigo.

 RE: SQL dinámico en TRIGGERS por edu [09/10/2008 11:10:46]
 RE: SQL dinámico en TRIGGERS por Alastor [10/10/2008 02:6:41]

 
RE: SQL dinámico en TRIGGERS por edu
Respuesta recibida el [09/10/2008 11:10:46]
que error te da? pon algo mas de informacion ;)
 [1] 

 
RE: SQL dinámico en TRIGGERS por Alastor
Respuesta recibida el [10/10/2008 02:06:41]
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.


 

Email:*
Alias:*
Título:*
Respuesta:*
Notificar:
(Indica si queremos recibir emails)

 
 

devjoker  Te recomendamos además ...
10/10/2006 Como conectar a ORACLE con Java
24/07/2006 SQL Dinamico    forma parte de...Tutorial PL/SQL
12/01/2006 Programación con PL/SQL    forma parte de...Tutorial PL/SQL
06/05/2007 Programación con Transact SQL    forma parte de...Tutorial de Transact SQL
11/01/2007 Referencias a espacios de nombres    forma parte de...Tutorial C#
31/03/2006 Tipos de datos en PL/SQL    forma parte de...Tutorial PL/SQL
31/03/2006 Operadores en PL/SQL    forma parte de...Tutorial PL/SQL
22/10/2005 Actualización de datos. UPDATE    forma parte de...Tutorial SQL
01/08/2006 Generar un fichero Excel con C# sin tener Excel instalado
06/05/2007 Introducción a Transact SQL    forma parte de...Tutorial de Transact SQL

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]