描述:
通过输入一个codeid 和日期,比较a和b表的某些字段的数据是否一致,a表和b表都有codeid和日期,把不一致的输出出来。
通过输入一个codeid 和日期,比较a和b表的某些字段的数据是否一致,a表和b表都有codeid和日期,把不一致的输出出来。
解决方案 »
- 如何执行SQL
- 如何把来自64bit的Oracle的dmp文件导入到32bit的Oracle里面
- 一个简单的SQL优化问题
- ORA-02070:数据库DB_SQL不支持此上下文中的update —— 从Oracle 通过 DB_LINK 更改 Sql Server 数据的时候出现这个问题,请问咋整?
- 请假几个Oracle体系结构方面的基础问题,谢谢!
- 想学Oracle,请大家推荐一本入门的电子书,最好从图形界面进入的,谢谢!
- 数据库的回滚段坏了,如何恢复?
- 假如我把临时表空间改成永久表空间会对系统产生怎样的影响?
- 怎样杀死oracle进程
- ORA-00603/ORA-00600问题
- 关于一些命令,大家进来帮我解释一下....
- Oracle有没有免费客户端开发工具?
time
name
from a full outer join b
on (a.codeid=b.codeid and a.datecol=b.datecol)
where a.col is not null
and b.col is not null
union all
select ... , 'b' tablename from b where not exists(select 1 from a where ...)
as
v_res number;
v_name a.name%type;
begin
select nullif(a.name, b.name)
into v_name
from a join b
on(a.id=b.id and a.time=b.time)
where a.id=p_id and a.time=p_time;
if v_name is null then
return 1;
else
return 0;
end if;
exception when others then
return 0;
end;
/
create or replace function compare_data(p_id number, p_time date) return number --返回1表示一样,0为不一样
as
v_res number;
v_name a.name%type;
begin
select nullif(a.name||a.address, b.name||b.address)
into v_name
from a join b
on(a.id=b.id and a.time=b.time)
where a.id=p_id and a.time=p_time;
if v_name is null then
return 1;
else
return 0;
end if;
exception when others then
return 0;
end;
/
as
v_res number;
address varchar2;
v_name a.name%type;
begin
select nullif(a.name||a.address, b.name||b.address)
into v_name,address
from a join b
on(a.id=b.id and a.time=b.time)
where a.id=p_id and a.time=p_time;
if v_name is null then
return 1;
else
return 0;
end if;
exception when others then
return 0;
end;
/
是这样吗?
上面的红色字是不用的
nullif(a.name||a.address, b.name||b.address)只会得到一个值,而不是两个值,这里是把name和address组合在一起了.
你可以用你的a表和b表试一试,实践最重要