使用内存表table()和connect by level 处理 一行多条数据显示问题

<p>一行多条数据显示问题比如:check_value varchar2(4000) values('1240,1110,1207,1134,1148,1184,10386')</p>
<p>想把这行该列的数据作为参数给SQL语句</p>

<p>select *</p>
<p>from a</p>
<p>where value in( check_value);</p>

<p>核心代码:</p>
<p> select substr<br>
(<br>
pi_column,<br>
instr(','||pi_column,',',1,level),<br>
instr(pi_column||',',',',1,level)-instr(','||pi_column,',',1,level)<br>
) a<br>
from dual<br>
connect by level<=length(pi_column)-length(replace(pi_column,','))+1;</p>

<p>用游标 open r_cur for 上面代码</p>

<p>然后 提取到字符数组中</p>
<p> FETCH r_cur bulk collect into lv_sql;</p>

<p>数组声明和初始化:</p>
<p> lv_sql type_array := type_array();</p>

<p>数组类型:</p>
<p> create or replace type type_array as table of varchar2(50)</p>

<p>整个函数代码:</p>
<p>create or replace function f_etl_proc(pi_column in varchar2) return type_array is<br><br>
lv_sql type_array := type_array();<br>
r_cur sys_Refcursor;<br><strong>begin</strong>
<br><br>
open r_cur for<br>
select substr<br>
(<br>
pi_column,<br>
instr(','||pi_column,',',1,level),<br>
instr(pi_column||',',',',1,level)-instr(','||pi_column,',',1,level)<br>
) a<br>
from dual<br>
connect by level<=length(pi_column)-length(replace(pi_column,','))+1;<br><br>
FETCH r_cur bulk collect into lv_sql;<br><br>
return(lv_sql);<br><strong>end</strong>
f_etl_proc; </p>

<p>返回的对象数组还不能被使用需要TABLE()来处理</p>
<p>select *<br>
from <strong>table </strong>
(select f_etl_proc(check_value)<br>
from etl_condition <br>
where condition_id = 2)</p>

<p>最后</p>
<p>select *</p>
<p>from a</p>
<p>where value in( select *<br>
from <strong>table </strong>
(select f_etl_proc(check_value)<br>
from etl_condition <br>
where condition_id = 2</p>
<p> )</p>
<p>);</p>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值