日期:2014-05-16  浏览次数:21302 次

100分,急!!返回多条数据拼接成一条记录的存储过程!!

SQL code

--参数是检查表(in),检查表的字段(in),检查表的过滤条件(in),参照表(in),参照表字段(in),输出结果(out);
--返回出检查表字段不存在于参照表对应字段中的数据,多条数据的话进行拼接,只返回一条数据,
--例如检查表中有数据E10,E12,E19三个数据不存在于参照表,那么返回E10,E12,E19这样字符串的一条数据。

--下面是我之前写的一个存储过程,在这基础上该怎么修改??

create or replace procedure sp_chk_data_test
(
  Result out varchar2,
  Table_name  in varchar2,
  Column_name in varchar2,
  Filter_value in varchar2
   )
is
V_SQL varchar2(2000);
begin
  V_SQL:='select count(*) from '||Table_name||' where '||Filter_value;
  execute immediate V_SQL into Result;
end sp_chk_data_test;



------解决方案--------------------
create or replace function fun_zftang_test(v_in_table varchar2,
v_cz_table varchar2,
v_cz_ziduan varchar2)
return varchar2 is
result_out varchar2(1000);
v_sql varchar2(1000);
begin
v_sql := 'select wm_concat(' || v_cz_ziduan || ') from ' || v_in_table ||
' aa where not exisits (select 1 from ' || v_cz_table ||
' bb where aa.'||v_cz_ziduan||'= bb.'||v_cz_ziduan;
execute immediate v_sql into result_out;
 return result_out;
end;

------解决方案--------------------
那简单。
1、赋值数组 (我还没太掌握 ,嘿嘿)
2、直接拼接成字符串。(如果输出过程中有问题,你就直接把你筛选出来的东西插入到表中)
for my_cur in ( 你筛选的sql语句 )
--然后开始拼你的串 。
loop
my_cur.筛选结果||’,‘
end loop ;
具体你还得 调试一下吧, 用游标拼串输出

------解决方案--------------------
用游标拼接,举个例子:
str:='';
for CUR in (select a from A minus select a from B)
loop
str:=str||CUR.a||','
end loop;
再把最后一个,去掉就行