Oracle拉出在sqlserver建表的語句

2021-12-29 22:01:14 字數 3261 閱讀 7245

我們將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屬主下的非臨時表。

作者:dba_白老大

最後更新日期: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;

Oracle的使用 建庫建表

create table student sid number 20 sname varchar2 10 新增一列 alter table student add gender number 1 修改列型別 varchar2 是可變長度型別 char是固定長度 alter table student...

mysql建表與sqlserver的幾點區別

1 mysql中datetime型別是不能設定隨系統時間更新的,可以換用timestamp型別。2 mysql中設定外來鍵和sqlserver不大一樣,你先需要將需要設定外來鍵關係的2個表型別設定為innodb型別,預設是myisam。因為mysql中只有innodb型別才支援外來鍵定義,其他的你定...

Oracle中的建表約束

約束是表一級的限制 如果存在依賴關係,約束可以防止錯誤的刪除資料 約束的型別 not null unique primary key foreign key check 使用者可以自定義約束,也可以使用oracle server的sys cn格式命名約束 約束建立的時機 建立表的時候,同時建立約束 ...