Función que he creado en Oracle y a la qual pasandole una cadena de texto: «nombre1,nombre2,nombre3». Nos los devolveria separados y podriamos hacer el insert de forma individual en la base de datos por ejemplo.
El código de la función es este:
function get_token(
the_list in varchar2,
the_index in number,
delim in varchar2 := ‘,’
)
return varchar2
is
start_pos number;
end_pos number;
begin
if the_index = 1 then
start_pos := 1;
else
start_pos := instr(the_list,delim,1,the_index – 1);
if start_pos = 0 then
return null;
else
start_pos := start_pos + length(delim);
end if;
end if;
end_pos := instr(the_list,delim,start_pos,1);
if end_pos = 0 then
return substr(the_list,start_pos);
else
return substr(the_list,start_pos,end_pos – start_pos);
end if;
end get_token;
En la variable delim le decimos si van a estar separadas por comas o porque delimitador. Un ejemplo simple de su uso es este:
v_contador :=1;
while GET_TOKEN(i_motivonovisita,v_contador,v_separador) is not null
LOOP
insert into tb_motivosnovisita (codvalor,foreignkeyfc,descripcion) values
(GET_TOKEN(i_codmotivonovisita,v_contador,v_separador),i_primarykey,
GET_TOKEN(i_motivonovisita,v_contador,v_separador));
v_contador := v_contador+ 1;
END LOOP;
Esto serviria para hacer un insert en una tabla con los registros que nos vendrian separados por «,»
Espero que sirva de ayuda
Filed under: Uncategorized | Tagged: bdd, development, insert, mysql, oracle, programacion, select, sgbd, sql | Leave a comment »