`
qtlkw
  • 浏览: 300808 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

oracle 迁移script

阅读更多
--==============================================================
-- migrate data define and body
--==============================================================
--**************************************************************migrate data begin**************************************
--open screen output
set serveroutput on;

--**********************************************package declare begin*********************************
create or replace package migration_package is
--declare procedures
--define cursor type
type sp_cursor is ref cursor;
--insert data into mapper table
procedure insert_auditmapper_data(mapperId in number, listenerName in varchar2, affectRows out number);
--insert data into the relation of mapper and listener table
procedure insert_xrefmapperlistener_data(mapperId in number, listenerId in number, affectRows out number);
--insert mapper id, Mapper Selector for GAL_PUBLIC_KEY_FIELD table
procedure update_publickeyfield_data(listenerId in number, mapperId in number, listenerName varchar2, u_pkf_affectRows out number, affectRows out number);
--migrate data
procedure migrate_data(isSuccessFlag out number);
end;
/
--**********************************************package declare end*********************************






--**********************************************package body begin*********************************
create or replace package body migration_package is
--insert data into mapper table
procedure insert_auditmapper_data(mapperId number, listenerName varchar2, affectRows out number) is
begin
--execute part
insert into GAL_AUDIT_MESSAGE_MAPPER (MAPPER_ID, MAPPER_NAME, MAPPER_DESCRIPTION, CREATED_BY, CREATION_DATE) values(mapperId, substr(listenerName||'_Mapper',1,255), substr('create a mapper for Listener: '||listenerName,1,255), 0, sysdate);
affectRows:= SQL%ROWCOUNT;
end;

--insert data into the relation of mapper and listener table
procedure insert_xrefmapperlistener_data(mapperId number, listenerId number, affectRows out number) is
begin
--execute part
insert into GAL_XREF_MAPPER_LISTENER (MAPPER_ID, LISTENER_ID, CREATED_BY, CREATION_DATE) values(mapperId, listenerId, 0, sysdate);
affectRows:= SQL%ROWCOUNT;
end;

--insert mapper id, Mapper Selector for GAL_PUBLIC_KEY_FIELD table
procedure update_publickeyfield_data(listenerId number, mapperId number, listenerName varchar2, u_pkf_affectRows out number, affectRows out number) is
v_publicKeyId gal_public_key_field.public_key_field_id%type;
begin
--execute part
--insert mapper id
update GAL_PUBLIC_KEY_FIELD set mapper_id=mapperId where listener_id=listenerId;
u_pkf_affectRows:= SQL%ROWCOUNT;
--get public key id
select PUBLIC_KEY_FIELD_ID_SEQ.NEXTVAL into v_publicKeyId from dual;
--insert Mapper Selector
insert into GAL_PUBLIC_KEY_FIELD (PUBLIC_KEY_FIELD_ID, MAPPER_ID, FIELD_NAME_DESCRIPTION, CONSTANT_VALUE, IS_XML_FIELD, FIELD_TYPE, CREATED_BY, CREATION_DATE, DEFAULT_VALUE) 
values(v_publicKeyId, mapperId, substr('Mapper Selector for '||listenerName,1,255), substr('Mapper Selector for '||listenerName,1,255), 'N', 'Mapper Selector', 0, sysdate, 'N');
affectRows:= SQL%ROWCOUNT;
end;

--insert data base on GAL_LISTENER TABLE
procedure migrate_data(isSuccessFlag out number) is
--define cursor var
m_cursor sp_cursor;
--define v_listenerId var
v_listenerId gal_listener.listener_id%type;
--define v_listenerName var
v_listenerName gal_listener.listener_name%type;
--define v_mapperId var
v_mapperId gal_audit_message_mapper.mapper_id%type;
affectRows number;
u_pkf_affectRows number;
mapper_affectRows number;
xref_affectRows number;
u_pkf_amount number;
i_pkf_amount number;
v_listeners_amount number;

begin
--execute part
dbms_output.put_line('migration data begin...');
mapper_affectRows:=0;
xref_affectRows:=0;
u_pkf_amount:=0;
i_pkf_amount:=0;

--get the listener rows amount
select count(distinct listener_id) into v_listeners_amount from GAL_LISTENER;
dbms_output.put_line('the GAL_LISTENER table rows amount: '||v_listeners_amount);

open m_cursor for select distinct listener_id, listener_name from GAL_LISTENER;
  loop
  fetch m_cursor into v_listenerId, v_listenerName;
  exit when m_cursor%notfound;
  --get mapper id from sequence
  select MAPPER_ID_SEQ.NEXTVAL into v_mapperId from dual;
  --dbms_output.put_line('listener_name...'||v_listenerName);
  --insert data into mapper table
  affectRows:=0;
  insert_auditmapper_data(v_mapperId, v_listenerName, affectRows);
  --sum the affect rows
  mapper_affectRows:=mapper_affectRows+affectRows;
  
  affectRows:=0;
  --insert data into the relation of mapper and listener table
  insert_xrefmapperlistener_data(v_mapperId, v_listenerId, affectRows);
  --sum the affect rows
  xref_affectRows:=xref_affectRows+affectRows;
  
  affectRows:=0;
  u_pkf_affectRows:=0;
  --insert mapper id for GAL_PUBLIC_KEY_FIELD table
  update_publickeyfield_data(v_listenerId, v_mapperId, v_listenerName, u_pkf_affectRows, affectRows);
  --sum the affect rows
  u_pkf_amount:=u_pkf_amount+u_pkf_affectRows;
  i_pkf_amount:=i_pkf_amount+affectRows;
  end loop;
  affectRows:=mapper_affectRows+xref_affectRows+u_pkf_amount+i_pkf_amount;
  dbms_output.put_line('Below are the execute result: ');
  dbms_output.put_line('insert GAL_AUDIT_MESSAGE_MAPPER table rows amount: '||mapper_affectRows);
  dbms_output.put_line('insert GAL_XREF_MAPPER_LISTENER table rows amount: '||xref_affectRows);
  dbms_output.put_line('update GAL_PUBLIC_KEY_FIELD table rows amount: '||u_pkf_amount);
  dbms_output.put_line('insert GAL_PUBLIC_KEY_FIELD table rows amount: '||i_pkf_amount);
  dbms_output.put_line('affect rows amount: '||affectRows);
  dbms_output.put_line('migration data end.');
  isSuccessFlag:=1;
  
  --close cursor
  close m_cursor;
  --dbms_output.put_line('close cursor!');
Exception
  when DUP_VAL_ON_INDEX then
  isSuccessFlag:=-1;
  rollback;
  raise_application_error(-20001, 'An error was encountered: insert duplicated data!'||' And the detail error info: '||SQLERRM);
  when others then
  isSuccessFlag:=-1;
  rollback;
  raise_application_error(-20001, 'An error was encountered1 - '||SQLCODE||' -ERROR- '||SQLERRM);
end;
end migration_package;
/
--***********************************************package body end************

--************************************migrate data end***********************


--==============================================================
  -- migrate data and update database version
--==============================================================
declare
isSuccessFlag number;
begin
--call procedure migrate_data
migration_package.migrate_data(isSuccessFlag);

if isSuccessFlag=1 then
  
  execute immediate 'alter table GAL_PUBLIC_KEY_FIELD drop COLUMN LISTENER_ID';
  dbms_output.put_line('drop listener_id from gal_public_key_field table successfully!');
  
  UPDATE GAL_SETTINGS SET SETTING_VALUE = '5.0.0' WHERE SETTING_NAME = 'DATABASE VERSION';
  commit;
end if;
end;
/

--clean operation
drop package migration_package;

exit;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics