一行多条数据显示问题比如:check_value varchar2(4000) values('1240,1110,1207,1134,1148,1184,10386')
想把这行该列的数据作为参数给SQL语句
select *
from a
where value in( check_value);
核心代码:
select substr
(
pi_column,
instr(','||pi_column,',',1,level),
instr(pi_column||',',',',1,level)-instr(','||pi_column,',',1,level)
) a
from dual
connect by level<=length(pi_column)-length(replace(pi_column,','))+1;
用游标 open r_cur for 上面代码
然后 提取到字符数组中
FETCH r_cur bulk collect into lv_sql;
数组声明和初始化:
lv_sql type_array := type_array();
数组类型:
create or replace type type_array as table of varchar2(50)
整个函数代码:
create or replace function f_etl_proc(pi_column in varchar2) return type_array is
lv_sql type_array := type_array();
r_cur sys_Refcursor;
begin
open r_cur for
select substr
(
pi_column,
instr(','||pi_column,',',1,level),
instr(pi_column||',',',',1,level)-instr(','||pi_column,',',1,level)
) a
from dual
connect by level<=length(pi_column)-length(replace(pi_column,','))+1;
FETCH r_cur bulk collect into lv_sql;
return(lv_sql);
end f_etl_proc;
返回的对象数组还不能被使用需要TABLE()来处理
select *
from table (select f_etl_proc(check_value)
from etl_condition
where condition_id = 2)
最后
select *
from a
where value in( select *
from table (select f_etl_proc(check_value)
from etl_condition
where condition_id = 2
)
);