目前常見的oracle數據遷移操作中,遷移結束後的數據比對是非常重要的一步,能夠確認是否遷移成功,在這裡為大家提供一些比對數據的小方案:
--1. 創建用於統計的表結構
create table SYSDBA.DATA_CHECK
(
Tab_Name char(60),
Tab_No number
);
--2. 將收集到的信息插入到表DATA_CHECK中
--(1)顯示遊標寫法:
declare
name varchar;
num number;
vsql varchar;
vsql_num varchar;
cur
cursor;
begin
open cur for select table_name from user_tables order by 1;
loop
fetch cur into name;
EXIT
when cur%NOTFOUND;
vsql_num='select count(*) from "'||name||'" ';
execute immediate vsql_num into num ;
vsql='insert into "SYSDBA"."DATA_CHECK" values ('''||name||''','''||num||''');';
--print(vsql);
execute immediate vsql;
end loop;
close cur;
commit;
end;
--(2)隱式遊標寫法
declare
v_table varchar;
v_cnt number;
vsql varchar;
vsql_num varchar;
begin
for rec in
(
select table_name from user_tables order by 1
)
loop
execute immediate 'select count(*) from '||rec.table_name into v_cnt;
vsql='insert into "SYSDBA"."DATA_CHECK" values ( '''||rec.table_name||''','''||v_cnt||''');';
--print(vsql);
execute immediate vsql;
end loop;
end;
--3. 查詢統計表DATA_CHECK
select * from SYSDBA.DATA_CHECK;
--4. 最後刪除統計表DATA_CHECK
drop table SYSDBA.DATA_CHECK;
--5. 獲取Oracle的記錄條數
set serveroutput on;
declare
v_cnt int;
begin
for rec in
(
select table_name from user_tables order by 1
)
loop
execute immediate 'select count(*) from '||rec.table_name into v_cnt;
dbms_output.put_line(rec.table_name || ',' || v_cnt);
end loop;
end;
閱讀更多 小芒果愛發呆 的文章