Array en Procedimiento Almacenado

A un procedimiento almacenado de Oracle, le paso un string con muchos datos separados por comas.
Quisiera saber, como se declara en un procedimiento almacenado de Oracle un array y como se trabajan con ellos.
Y también como descomponer ese string en un array para recorrerlo.

1 respuesta

Respuesta
1
He probado a crear un procedure con el siguiente código, y al ejecutar el procedure no tengo ningún problema.. Prueba a ejecutar el siguiente código sin cambiar nada primero, y luego intenta introducirlo en tu código, si falla, creo que más bien será un tema de ámbitos, de si es un package, etc...
create or replace procedure prueba_kk is
type array_p is table of varchar2(4000) index by binary_integer;
l_data array_p;
l_txt long := 'pepe,joe,luis,luisa,marcos';
procedure parse( p_str in varchar2 )
is
l_str long := p_str || ',';
l_n number;
begin
l_data.delete;
loop
l_n := instr( l_str, ',' );
exit when nvl(l_n,0) = 0;
l_data( l_data.count+1 ) := substr( l_str, 1, l_n-1 );
l_str := substr( l_str, l_n+1 );
end loop;
end;
begin
parse( l_txt );
for i in 1 .. l_data.count
loop
dbms_output.put_line( l_data(i) );
end loop;
end;
/
Luego ejeuté
prueba_kk;
Y el resultado fue el esperado:
Pepe
Joe
Luis
Luisa
Marcos
PL/SQL procedure successfully completed.
También ten en cuenta que el ámbito del tipo es sólo el paquete o procedure donde se utilice el array..
No se si te ha llegado mi nueva pregunta.
Me da un error y no se como solucionarlo:
He puesto lo siguiente encima de la declaración de mi proc almacenado:
Declare
type array_p is table of varchar2(4000) index by binary_integer;
l_data array_p;
l_txt long := 'pepe,joe,luis,luisa,marcos';
procedure parse( p_str in varchar2 )
is
l_str long := p_str || ',';
l_n number;
begin
l_data.delete;
loop
l_n := instr( l_str, ',' );
exit when nvl(l_n,0) = 0;
l_data( l_data.count+1 ) := substr( l_str, 1, l_n-1 );
l_str := substr( l_str, l_n+1 );
end loop;
end;
Y despues del Begin de mi proc almacenado he puesto:
parse( l_txt );
for i in 1 .. l_data.count
loop
dbms_output.put_line( l_data(i) );
end loop;
Pues en la linea parse( l_txt );
Me da el siguiente error:
Must be declared
¿Sabes por que es?
Si me funciona, voy a ver si lo soluciono. Muchas gracias
Tendrías que hacer algo parecido a esto. Como en Oracle no hay un tipo predefinido como aaray, tendrías que crearlo tú:
Declare
type array_p is table of varchar2(4000) index by binary_integer;
l_data array_p;
l_txt long := 'pepe,joe,luis,luisa,marcos';
procedure parse( p_str in varchar2 )
is
l_str long := p_str || ',';
l_n number;
begin
l_data.delete;
loop
l_n := instr( l_str, ',' );
exit when nvl(l_n,0) = 0;
l_data( l_data.count+1 ) := substr( l_str, 1, l_n-1 );
l_str := substr( l_str, l_n+1 );
end loop;
end;
begin
parse( l_txt );
for i in 1 .. l_data.count
loop
dbms_output.put_line( l_data(i) );
end loop;
end;
/

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas