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

求 貌似简单,却难以实现的一SQL语句
表A

有字段
  code_name  
  1,2
  2,3
  1,2,3

-----
表B
有   1,2,3...等的解释表
code_id     remarks  
1                 联电无效
2                 联电无人接
3                 .....
----------
想实现
把表A翻译出来
code_name,   remark  
1,2                 联电无效,联电无人接

应该用函数可以实现,但就是不知怎写




------解决方案--------------------
create table test3(code_id integer, remarks varchar2(100));
insert into test3
select 1, '联电无效 ' from dual
union all
select 2, '联电无人接 ' from dual
union all
select 3, '无 ' from dual;
--创建函数
create or replace function f_test1(var_str in string,delimiter in string) return string
is
var_tmp varchar2(2000);
var_element varchar2(2000);
rst varchar2(2000);
begin
var_tmp := var_str;
rst:= ' ';
while instr(var_tmp,delimiter)> 0 loop
var_element := substr(var_tmp,1,instr(var_str,delimiter)-1);
var_tmp := substr(var_tmp,instr(var_str,delimiter)+1,length(var_tmp));
select remarks into var_element from test3 where code_id=var_element;
rst:=rst||var_element|| ', ';
end loop;
select remarks into var_element from test3 where code_id=var_tmp;
rst:=rst||var_element;
return rst;
end;

--执行测试查询
select '1,2 ',f_test1( '1,2 ', ', ') remark from dual
--Result
1,2 联电无效,联电无人接