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

时间:2022-09-20 19:27:56


--参数是检查表(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;

13 个解决方案

#1


 E10,E12,E19 这三条数据你能查出来不? 

#2


引用 1 楼  的回复:
E10,E12,E19 这三条数据你能查出来不?

这三条才检查表里有,参照表中没有,属于多出的不正确的数据,以参照表数据为准,所以需要筛出

#3


 那你是卡在“筛选”这了,还是卡在“返回数据拼成串”这部了

#4


引用 3 楼  的回复:
那你是卡在“筛选”这了,还是卡在“返回数据拼成串”这部了

拼成串这步

#5


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;

#6


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

#7


输入表a,参照表b,参照字段c,对于字段c,存在b表,但是不存在a表的数据;
引用 5 楼  的回复:
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
  ……

#8


引用 7 楼  的回复:
输入表a,参照表b,参照字段c,对于字段c,存在b表,但是不存在a表的数据;

引用 5 楼 的回复:
create or replace function fun_zftang_test(v_in_table varchar2,
v_cz_table varchar2,
v_cz_ziduan varchar2)
return varchar2 is
result_out varc……

这个我知道,但是这里查出的结果进行拼接,就是查出的单列多行数据拼接成一列一行的字符串怎么做?

#9


那就使用存储过程,把结果插入到表中去~~~~
引用 8 楼  的回复:
引用 7 楼 的回复:
输入表a,参照表b,参照字段c,对于字段c,存在b表,但是不存在a表的数据;

引用 5 楼 的回复:
create or replace function fun_zftang_test(v_in_table varchar2,
v_cz_table varchar2,
v_cz_ziduan varchar2)
return varchar2 is
re……

#10


多条数据的话进行拼接,只返回一条数据,

你自己这么要求的,只返回一条数据。。。

#11


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

#12


引用 7 楼  的回复:
输入表a,参照表b,参照字段c,对于字段c,存在b表,但是不存在a表的数据;

引用 5 楼 的回复:
create or replace function fun_zftang_test(v_in_table varchar2,
v_cz_table varchar2,
v_cz_ziduan varchar2)
return varchar2 is
result_out varc……

可以多问一句吗?如果是返回多个字段多行的结果集该怎么写?

#13


引用 10 楼  的回复:
多条数据的话进行拼接,只返回一条数据,

你自己这么要求的,只返回一条数据。。。

算了,我另开一帖吧,谢谢各位了~

#1


 E10,E12,E19 这三条数据你能查出来不? 

#2


引用 1 楼  的回复:
E10,E12,E19 这三条数据你能查出来不?

这三条才检查表里有,参照表中没有,属于多出的不正确的数据,以参照表数据为准,所以需要筛出

#3


 那你是卡在“筛选”这了,还是卡在“返回数据拼成串”这部了

#4


引用 3 楼  的回复:
那你是卡在“筛选”这了,还是卡在“返回数据拼成串”这部了

拼成串这步

#5


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;

#6


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

#7


输入表a,参照表b,参照字段c,对于字段c,存在b表,但是不存在a表的数据;
引用 5 楼  的回复:
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
  ……

#8


引用 7 楼  的回复:
输入表a,参照表b,参照字段c,对于字段c,存在b表,但是不存在a表的数据;

引用 5 楼 的回复:
create or replace function fun_zftang_test(v_in_table varchar2,
v_cz_table varchar2,
v_cz_ziduan varchar2)
return varchar2 is
result_out varc……

这个我知道,但是这里查出的结果进行拼接,就是查出的单列多行数据拼接成一列一行的字符串怎么做?

#9


那就使用存储过程,把结果插入到表中去~~~~
引用 8 楼  的回复:
引用 7 楼 的回复:
输入表a,参照表b,参照字段c,对于字段c,存在b表,但是不存在a表的数据;

引用 5 楼 的回复:
create or replace function fun_zftang_test(v_in_table varchar2,
v_cz_table varchar2,
v_cz_ziduan varchar2)
return varchar2 is
re……

#10


多条数据的话进行拼接,只返回一条数据,

你自己这么要求的,只返回一条数据。。。

#11


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

#12


引用 7 楼  的回复:
输入表a,参照表b,参照字段c,对于字段c,存在b表,但是不存在a表的数据;

引用 5 楼 的回复:
create or replace function fun_zftang_test(v_in_table varchar2,
v_cz_table varchar2,
v_cz_ziduan varchar2)
return varchar2 is
result_out varc……

可以多问一句吗?如果是返回多个字段多行的结果集该怎么写?

#13


引用 10 楼  的回复:
多条数据的话进行拼接,只返回一条数据,

你自己这么要求的,只返回一条数据。。。

算了,我另开一帖吧,谢谢各位了~