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

解决方案 »

  1.   

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

  2.   

    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;
      

  3.   

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

  4.   

    输入表a,参照表b,参照字段c,对于字段c,存在b表,但是不存在a表的数据;
      

  5.   

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