Oracle拉進sqlserver表宣告的建設

2021-09-07 01:19:51 字數 3321 閱讀 1634

我們將oracle資料被同步到sqlserver時間,早餐在sqlserver表中的端構造。

我們是不同步的複雜領域,只考慮以下四種資料型別。

oracle到sqlserver做的對映:

int -> int

number -> decimal(18,6)

number(p,s) -> decimal(p,s)

date -> datetime

varchar2(n) -> nvarchar(n)  

以下是從oracle端執行的plsql指令碼。

/*簡單介紹:從oracle拉出在mssql建表的指令碼。這是用plsql語言寫成的,在oracle中執行的指令碼。

例如以下是取出bom屬主下的非暫時表。

最後更新日期:20140515

*//*

oracle到sqlserver做的對映:

int -> int

number -> decimal(18,6)

number(p,s) -> decimal(p,s)

date -> datetime

varchar2(n) -> nvarchar(n)  

*/declare

v_column_name varchar2(30);

v_data_type varchar2(106);

v_data_length number;

v_data_precision number;

v_data_scale number;

v_cnt int;

begin

for i in (

select 'ggmgr' as owner, 't6' as table_name from dual union

select 'ggmgr' as owner, 't2' as table_name from dual union

select 'ggmgr' as owner, 't6' as table_name from dual

) loop

dbms_output.put_line('create table '||'erp'||'.'||'dbo.'||i.table_name||'(');

select count(*)

into v_cnt

from dba_tab_columns

where table_name = i.table_name

and owner = i.owner;

for b in 1 .. v_cnt loop

select column_name,

data_type,

data_length,

data_precision,

data_scale

into v_column_name,

v_data_type,

v_data_length,

v_data_precision,

v_data_scale

from dba_tab_columns t

where table_name = i.table_name

and owner = i.owner

and column_id = b;

--int

if v_data_type = 'number' and v_data_precision is null and b != v_cnt then

dbms_output.put_line(v_column_name||'  decimal'||',');

end if;

if v_data_type = 'number' and v_data_precision is null and b = v_cnt then

dbms_output.put_line(v_column_name||'  decimal');

end if;

--number

if (v_data_type = 'number')  and (v_data_precision is not null) and (b != v_cnt) then

dbms_output.put_line(v_column_name||'  decimal'||'('||v_data_precision||','||v_data_scale||'),');

end if;

if (v_data_type = 'number') and (v_data_precision is not null) and (b = v_cnt) then

dbms_output.put_line(v_column_name||'  decimal'||'('||v_data_precision||','||v_data_scale||')');

end if;

--varchar2

if (v_data_type = 'varchar2')  and (v_data_length is not null) and (b != v_cnt) then

dbms_output.put_line(v_column_name||'  nvarchar'||'('||v_data_length||'),');

end if;

if (v_data_type = 'varchar2')  and (v_data_length is not null) and (b = v_cnt) then

dbms_output.put_line(v_column_name||'  nvarchar'||'('||v_data_length||')');

end if;

--date

if (v_data_type = 'date') and (b != v_cnt) then

dbms_output.put_line(v_column_name||'  datetime,');

end if;

if (v_data_type = 'date') and (b = v_cnt) then

dbms_output.put_line(v_column_name||'  datetime');

end if;

--不屬於int,number,date,varchar2

if (v_column_name != 'number')  and (v_column_name != 'date') and (v_column_name != 'varchar2')  then

null;

end if;  

end loop;

dbms_output.put_line(');'||chr(10));

end loop;

end;

GG配置Oracle同步到SQLServer

gg配置oracle同步到sqlserver 源端目標端準備一張測試用的表。oracle源端 drop table ggmgr.t1 create table ggmgr.t1 id int primary key,name varchar2 50 time date sqlserver目標端 be...

資料庫連線池 Oracle和SQL Server

近期看到許多朋友在問資料庫連線池的問題,所以特地總結了一下.以下是oracle和sql server在配置連線池時的區別 1.oracle與sql server在配置連線池時的區別 tomcat配置檔案中 oracle的配置方法 urljdbc oracle thin 172.28.122.49 1...

ISA SERVER日誌存放SQL SERVER中

在預設安裝 isa 2004 或是2006後,將會自動安裝簡易版的 sql server 來存放防火牆與 webproxy 的連線訪問日誌 可是由於 msde 僅限於單機連線的使用 並且在訪問上也有容量大小的限制 因此為了提公升整體 isa 的執行能力 建議可以改由將這些頻繁的日誌檔案訪問 寫入到內...