oracle表值函数的参数怎么传某个表中的一列

时间:2022-11-06 10:04:05
oracle表值函数的参数 想把某个表中的一列 都传进去怎么整?
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 存的数据格式是什么样的?

#3


引用 2 楼 wmxcn2000 的回复:
1、说明一下 f_orgurl 是 TYPE,还是一个 函数
2、M.FURL 存的数据格式是什么样的?

函数   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  可能有多个值 
所以想传进表值函数中

#6


引用 5 楼 q465897859 的回复:
M.FURL 的数据 是这样的 org:AA\DFFDS\SDFSDF\SDFDF 
想拆成这样
 org:AA
org:AA\DFFDS
 org:AA\DFFDS\SDFSDF
org:AA\DFFDS\SDFSDF\SDFDF 
M.FURL  可能有多个值 
所以想传进表值函数中


没太看懂意思.根据我自己的理解吧.
传进去一列的话就先拆分(拆分办法在最下面),然后用
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;

#1


使用type吧

#2


1、说明一下 f_orgurl 是 TYPE,还是一个 函数
2、M.FURL 存的数据格式是什么样的?

#3


引用 2 楼 wmxcn2000 的回复:
1、说明一下 f_orgurl 是 TYPE,还是一个 函数
2、M.FURL 存的数据格式是什么样的?

函数   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  可能有多个值 
所以想传进表值函数中

#6


引用 5 楼 q465897859 的回复:
M.FURL 的数据 是这样的 org:AA\DFFDS\SDFSDF\SDFDF 
想拆成这样
 org:AA
org:AA\DFFDS
 org:AA\DFFDS\SDFSDF
org:AA\DFFDS\SDFSDF\SDFDF 
M.FURL  可能有多个值 
所以想传进表值函数中


没太看懂意思.根据我自己的理解吧.
传进去一列的话就先拆分(拆分办法在最下面),然后用
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;