求一相对复杂的sql写法解决方案
求一相对复杂的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
这样我就可以与上层进行关联过滤了。希望哪位兄弟帮忙!!!
------解决方案--------------------
写成过程来处理!
------解决方案--------------------
目前我遇到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; /