Oracle - es posible hacer execute immediate a una funcion

 
Vista:
Imágen de perfil de Otoniel

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder