select * from table(f_orgurl(M.FURL))
M.FURL 是某个表中的列
select m.furl from s_path m;
这样有什么办法么
8 个解决方案
#1
使用type吧
#2
1、说明一下 f_orgurl 是 TYPE,还是一个 函数
2、M.FURL 存的数据格式是什么样的?
2、M.FURL 存的数据格式是什么样的?
#3
函数 M.FURL 的格式是vachar2
#4
select * from (select * from table(f_orgurl(M.FURL)) ) A cross join S_TABLE B
类似这样的写法 在oracle中要怎么写 就是像关联 然后用函数拆分下数据 膨胀下
#5
M.FURL 的数据 是这样的 org:AA\DFFDS\SDFSDF\SDFDF
想拆成这样
org:AA
org:AA\DFFDS
org:AA\DFFDS\SDFSDF
org:AA\DFFDS\SDFSDF\SDFDF
M.FURL 可能有多个值
所以想传进表值函数中
想拆成这样
org:AA
org:AA\DFFDS
org:AA\DFFDS\SDFSDF
org:AA\DFFDS\SDFSDF\SDFDF
M.FURL 可能有多个值
所以想传进表值函数中
#6
没太看懂意思.根据我自己的理解吧.
传进去一列的话就先拆分(拆分办法在最下面),然后用
select * from table(f_orgurl('org:AA\')) union all
select * from table(f_orgurl('org:AA\DFFDS\')) union all
select * from table(f_orgurl('org:AA\DFFDS\SDFSDF\')) union all
select * from table(f_orgurl('org:AA\DFFDS\SDFSDF\SDFDF\'))得到你的结果集
--拆分
declare
str varchar2(4000) := 'org:AA\DFFDS\SDFSDF\SDFDF';
type cursors is ref cursor;
cur cursors;
o_out varchar2(4000);
begin
if substr(str, -1) <> '\' then
str := str || '\';
end if;
open cur for
select substr(str, 1, lev) str
from (select str, instr(str, '\', 1, level) lev
from (select str from dual)
connect by level <= REGEXP_COUNT(str, '[^\]+'));
loop
fetch cur
into o_out;
exit when cur%notfound;
dbms_output.put_line(o_out);
end loop;
close cur;
end;
#7
如果问题解决,请及时结贴
#8
with t as (select 'org:AA\DFFDS\SDFSDF\SDFDF' n from dual),
t1 as (select substr(n,1,instr(n,':')) n1,substr(n,instr(n,':')+1) n2 from t)
select n1||regexp_substr(n2,'[^\]',1,level) as nn from t1 connect by level<=length(n2)-length(regexp_replace(n2,'\\','')+1;
t1 as (select substr(n,1,instr(n,':')) n1,substr(n,instr(n,':')+1) n2 from t)
select n1||regexp_substr(n2,'[^\]',1,level) as nn from t1 connect by level<=length(n2)-length(regexp_replace(n2,'\\','')+1;
#1
使用type吧
#2
1、说明一下 f_orgurl 是 TYPE,还是一个 函数
2、M.FURL 存的数据格式是什么样的?
2、M.FURL 存的数据格式是什么样的?
#3
函数 M.FURL 的格式是vachar2
#4
select * from (select * from table(f_orgurl(M.FURL)) ) A cross join S_TABLE B
类似这样的写法 在oracle中要怎么写 就是像关联 然后用函数拆分下数据 膨胀下
#5
M.FURL 的数据 是这样的 org:AA\DFFDS\SDFSDF\SDFDF
想拆成这样
org:AA
org:AA\DFFDS
org:AA\DFFDS\SDFSDF
org:AA\DFFDS\SDFSDF\SDFDF
M.FURL 可能有多个值
所以想传进表值函数中
想拆成这样
org:AA
org:AA\DFFDS
org:AA\DFFDS\SDFSDF
org:AA\DFFDS\SDFSDF\SDFDF
M.FURL 可能有多个值
所以想传进表值函数中
#6
没太看懂意思.根据我自己的理解吧.
传进去一列的话就先拆分(拆分办法在最下面),然后用
select * from table(f_orgurl('org:AA\')) union all
select * from table(f_orgurl('org:AA\DFFDS\')) union all
select * from table(f_orgurl('org:AA\DFFDS\SDFSDF\')) union all
select * from table(f_orgurl('org:AA\DFFDS\SDFSDF\SDFDF\'))得到你的结果集
--拆分
declare
str varchar2(4000) := 'org:AA\DFFDS\SDFSDF\SDFDF';
type cursors is ref cursor;
cur cursors;
o_out varchar2(4000);
begin
if substr(str, -1) <> '\' then
str := str || '\';
end if;
open cur for
select substr(str, 1, lev) str
from (select str, instr(str, '\', 1, level) lev
from (select str from dual)
connect by level <= REGEXP_COUNT(str, '[^\]+'));
loop
fetch cur
into o_out;
exit when cur%notfound;
dbms_output.put_line(o_out);
end loop;
close cur;
end;
#7
如果问题解决,请及时结贴
#8
with t as (select 'org:AA\DFFDS\SDFSDF\SDFDF' n from dual),
t1 as (select substr(n,1,instr(n,':')) n1,substr(n,instr(n,':')+1) n2 from t)
select n1||regexp_substr(n2,'[^\]',1,level) as nn from t1 connect by level<=length(n2)-length(regexp_replace(n2,'\\','')+1;
t1 as (select substr(n,1,instr(n,':')) n1,substr(n,instr(n,':')+1) n2 from t)
select n1||regexp_substr(n2,'[^\]',1,level) as nn from t1 connect by level<=length(n2)-length(regexp_replace(n2,'\\','')+1;