
es posible hacer execute immediate a una funcion
Publicado por Otoniel (12 intervenciones) el 13/11/2014 15:54:44
este es mi codigo el cual funciona perfectamente con la linea eliminada mediante (--) pero necesito hacerlo dinamicamente x cuestiones de performance pero me muestra el error:'"invalid SQL statement"'. Entonces, es posible ejecutar dinamicamente una funcion? me pudieran decir como?. Gracias x la respuesta
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
declare
o varchar2(500);
t31 number:=6;
n1 varchar2(500):='DEPT';
refcolname1 varchar2(500):='ID_DEPT';
reftabname1 varchar2(500):='DEPARTAMENTO';
lol varchar2(500);
co varchar2(500);
function addfkcols(n varchar2,t3 number,refcolname varchar2,reftabname varchar2)
return varchar2 is
temp number;
bloque1 varchar2(500);
bloque2 varchar2(500);
begin
/*select countrows into t3 from fortemp where columnname = n;--selecciono la cantidad de filas de la tabla foranea
select columnrefname into refcolname from fortemp where columnname = n;---selecciono el nombre de la columna a la cual se le hace referencia
select tablename into reftabname from fortemp where columnname = n; ---selecciono el nombre de la tabla foranea*/
temp:= round ((dbms_random.value(1, t3)));---le hago el aleatoriamiento
bloque1:='SELECT '||refcolname||' from ( select '||refcolname||', rownum as rnP from '||reftabname||' )WHERE rnP = '||temp||'';---seleccionoel atributo aleatorio correspondiente
execute immediate bloque1 into o;
bloque2:='update LOADER set '||n||'=:o';
execute immediate bloque2 using o;
return o;
end;
begin
--lol:='addfkcols(n1,t31,refcolname1,reftabname1 )';
lol:='addfkcols(:1,:2,:3,:4)';
execute IMMEDIATE lol into co using n1,t31,refcolname1,reftabname1;
insert into T(Y)values(co);
end;
Valora esta pregunta


0