| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> Can someome run this in oracle 9i for me and tell if it returns results
please!
we have a procedure that runs fine in 8i but not in 9i. Should work in both. can someone run in 9i 9.0.1.0.0
here is the statment that will run it
select delimited.word('number1_at_number2@number3@', 1, '', '@') , delimited.word('number1_at_number2@number3@', 2, '', '@') from dual
here is the source
CREATE OR REPLACE package body delimited as
type vcArray is table of varchar2(2000) index by binary_integer;
g_words vcArray;
g_empty vcArray;
g_last_string varchar2(4096);
function de_quote( p_str in varchar2, p_enc_by in varchar2 ) return
varchar2
is
begin
return replace( ltrim( rtrim( p_str, p_enc_by ), p_enc_by ),
p_enc_by||p_enc_by, p_enc_by );
end de_quote;
procedure parse( p_str in varchar2,
p_delim in varchar2,
p_sep in varchar2 )
is
l_n number default 1;
l_in_quote boolean default FALSE;
l_ch char(1);
l_len number default nvl(length( p_str ),0);
begin
if ( l_len = 0 ) then
return;
end if;
g_words := g_empty;
g_words(1) := NULL;
for i in 1 .. l_len loop
l_ch := substr( p_str, i, 1 );
if ( l_ch = p_delim ) then
l_in_quote := NOT l_in_quote;
end if;
if ( l_ch = p_sep AND NOT l_in_quote ) then
l_n := l_n + 1;
g_words(l_n) := NULL;
else
g_words(l_n) := g_words(l_n)||l_ch;
end if;
end loop;
for i in 1 .. l_n loop
g_words(i) := de_quote( g_words(i), p_delim );
end loop;
end parse;
function word( p_str in varchar2,
p_n in varchar2,
p_enclosed_by in varchar2 default '''',
p_separated_by in varchar2 default ',' ) return
varchar2
is
begin
if ( g_last_string is NULL or p_str <> g_last_string ) then
g_last_string := p_str;
parse( p_str, p_enclosed_by, p_separated_by );
end if;
return g_words( p_n );
exception
when no_data_found then return NULL;
end;
end delimited;
/
Received on Thu Apr 25 2002 - 14:39:23 CDT
![]() |
![]() |