--参数是检查表(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
这三条才检查表里有,参照表中没有,属于多出的不正确的数据,以参照表数据为准,所以需要筛出
#3
那你是卡在“筛选”这了,还是卡在“返回数据拼成串”这部了
#4
拼成串这步
#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;
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 ;
具体你还得 调试一下吧, 用游标拼串输出
1、赋值数组 (我还没太掌握 ,嘿嘿)
2、直接拼接成字符串。(如果输出过程中有问题,你就直接把你筛选出来的东西插入到表中)
for my_cur in ( 你筛选的sql语句 )
--然后开始拼你的串 。
loop
my_cur.筛选结果||’,‘
end loop ;
具体你还得 调试一下吧, 用游标拼串输出
#7
输入表a,参照表b,参照字段c,对于字段c,存在b表,但是不存在a表的数据;
#8
这个我知道,但是这里查出的结果进行拼接,就是查出的单列多行数据拼接成一列一行的字符串怎么做?
#9
那就使用存储过程,把结果插入到表中去~~~~
#10
多条数据的话进行拼接,只返回一条数据,
你自己这么要求的,只返回一条数据。。。
你自己这么要求的,只返回一条数据。。。
#11
用游标拼接,举个例子:
str:='';
for CUR in (select a from A minus select a from B)
loop
str:=str||CUR.a||','
end loop;
再把最后一个,去掉就行
str:='';
for CUR in (select a from A minus select a from B)
loop
str:=str||CUR.a||','
end loop;
再把最后一个,去掉就行
#12
可以多问一句吗?如果是返回多个字段多行的结果集该怎么写?
#13
算了,我另开一帖吧,谢谢各位了~
#1
E10,E12,E19 这三条数据你能查出来不?
#2
这三条才检查表里有,参照表中没有,属于多出的不正确的数据,以参照表数据为准,所以需要筛出
#3
那你是卡在“筛选”这了,还是卡在“返回数据拼成串”这部了
#4
拼成串这步
#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;
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 ;
具体你还得 调试一下吧, 用游标拼串输出
1、赋值数组 (我还没太掌握 ,嘿嘿)
2、直接拼接成字符串。(如果输出过程中有问题,你就直接把你筛选出来的东西插入到表中)
for my_cur in ( 你筛选的sql语句 )
--然后开始拼你的串 。
loop
my_cur.筛选结果||’,‘
end loop ;
具体你还得 调试一下吧, 用游标拼串输出
#7
输入表a,参照表b,参照字段c,对于字段c,存在b表,但是不存在a表的数据;
#8
这个我知道,但是这里查出的结果进行拼接,就是查出的单列多行数据拼接成一列一行的字符串怎么做?
#9
那就使用存储过程,把结果插入到表中去~~~~
#10
多条数据的话进行拼接,只返回一条数据,
你自己这么要求的,只返回一条数据。。。
你自己这么要求的,只返回一条数据。。。
#11
用游标拼接,举个例子:
str:='';
for CUR in (select a from A minus select a from B)
loop
str:=str||CUR.a||','
end loop;
再把最后一个,去掉就行
str:='';
for CUR in (select a from A minus select a from B)
loop
str:=str||CUR.a||','
end loop;
再把最后一个,去掉就行
#12
可以多问一句吗?如果是返回多个字段多行的结果集该怎么写?
#13
算了,我另开一帖吧,谢谢各位了~