日期:2014-05-17  浏览次数:20781 次

求一相对复杂的sql写法
目前我遇到oracel数据库中一张表t_order,其中有一个字段存在上层数据合并后存入到这个字段的内容,但也有不合并的,具体情况如下:
表:t_order
字段:ordercode
数据内容:
ordercode
VF090119/VF090118
VF090120
VF090117/VF090116/VF090115
VF090121

因为我要控制上层数据如果已经流到t_order中就不能再显示,这样如果根据ordercode进行关联,合并的数据就无法与上层进行关联了,能不能写一个sql语句把合并的ordercode自动拆分,或者提供一个sql函数也可以。
具体显示效果:
ordercode
VF090119
VF090118
VF090120
VF090117
VF090116
VF090115
VF090121
这样我就可以与上层进行关联过滤了。希望哪位兄弟帮忙!!!

------解决方案--------------------
写成过程来处理!
------解决方案--------------------
SQL code

create or replace type acc_type as object
(acc varchar2(50))
/

create or replace type acc_table as table of acc_type
/

create or replace function str2table (acc_str in varchar2) return acc_table pipelined
is
v_str varchar2(30000) := acc_str;
v_acc varchar2(30);
v_acc_end pls_integer;
begin
loop
v_acc_end := instrb(v_str,',');
exit when (v_acc_end=0 or v_str is null);
v_acc := substrb(v_str,1,v_acc_end-1);
v_str := ltrim(v_str,v_acc);
v_str := ltrim(v_str,',');
pipe row(acc_type(rtrim(v_acc,';')));
end loop;
return;
end;
/