Oracle拉出在sqlserver建表的语句

我们将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拉出在sqlserver建表的语句

时间: 2024-10-14 02:42:53

Oracle拉出在sqlserver建表的语句的相关文章

Oracle获取干净的建表DDL语句,不含其它存储、表空间、段属性

早上一个同事资讯怎么获取到建表语句而且是不带存储那种SQL.Oracle自己提供了一个函数DBMS_METADATA.GET_DDL,但是获取到的建表语句含有存储.表空间.以及一些其他段的属性.如图: 看到这个获取到的ddl语句,想通过利用Oracle函数来截取的方式获取建表语句. 思路为:1.通过get_ddl获取建表语句 abc2.将abc中的pctfree'替换成';'3.计算';'的位置4.用substr来截取abc,从开头到';'的长度 SQL如下: SELECT SUBSTR(REP

生成建表、建用户、建表空间语句

第一种方法是使用工具,如:pl/sql developer,在[工具]--[导出用户对象]出现就可以得到建表脚本.第二种方法是,sql语句. DBMS_METADATA.GET_DDL包可以得到数据库的对象的ddl脚本.如下(SQLPLUS中执行): 1.得 到一个表的ddl语句: SET SERVEROUTPUT ON SET LINESIZE 1000 SET FEEDBACK OFF set long 999999             ------显示不完整 SET PAGESIZE

基于ORACLE数据库的循环建表及循环创建存储过程的SQL语句实现

一.概述 在实际的软件开发项目中,我们经常会遇到需要创建多个相同类型的数据库表或存储过程的时候.例如,如果按照身份证号码的尾号来分表,那么就需要创建10个用户信息表,尾号相同的用户信息放在同一个表中. 对于类型相同的多个表,我们可以逐个建立,也可以采用循环的方法来建立.与之相对应的,可以用一个存储过程实现对所有表的操作,也可以循环建立存储过程,每个存储过程实现对某个特定表的操作. 本文中,我们建立10个员工信息表,每个表中包含员工工号(8位)和年龄字段,以工号的最后一位来分表.同时,我们建立存储

Oracle 建表SQL语句

ALTER TABLE "USBP_TASK_PROGRESS_STAT" DROP CONSTRAINT FK_USBP_TAS_REFERENCE_USBP_TAS; DROP TABLE "USBP_TASK_PROGRESS_STAT" CASCADE CONSTRAINTS; /*==============================================================*//* Table: "USBP_TASK

Oracle 12c 建表空间语句

create tablespace TBS_DYS datafile 'D:/Oracle_12c/app/dingyingsi/oradata/dingyingsi/TBS_DYS.ba' size 1024m reuse autoextend on next 100m maxsize UNLIMITED extent management local; CREATE TEMPORARY TABLESPACE TBS_DYS_TEMP TEMPFILE 'D:/Oracle_12c/app/d

Access建表SQL语句Create Table设置自动增长列的关键字AUTOINCREMENT使用方法

SQL AUTO INCREMENT 字段 uto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INCREMENT 字段 我们通常希望在每次插入新记录时,自动地创建主键字段的值. 我们可以在表中创建一个 auto-increment 字段. 用于 MySQL 的语法 下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键: CREATE TABLE Persons ( P_Id int

sql建表常用语句

--删除主键 alter table 表名 drop constraint 主键名 --添加主键 alter table 表名 add constraint 主键名 primary key(字段名1,字段名2--) --添加非聚集索引的主键 alter table 表名 add constraint 主键名 primary key NONCLUSTERED(字段名1,字段名2--) 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIM

SqlServer获取表结构语句

--sql server 2005-- 1. 表结构信息查询 -- ========================================================================-- 表结构信息查询-- 邹建 2005.08(引用请保留此信息)-- ========================================================================SELECT TableName=CASE WHEN C.column_

oracle 快速建表空间,用户,赋权

本文章并不是给初学者详细详解oracle下如何建立表空间,用户,赋权等命令参数及含义,本文章可能只是对有一定的oracle基础的朋友有所帮助. 最近项目中又开始需要oracle数据库,在搭建环境时,发现自己的oracle命令已经忘了差不多,所以我从网上找来一些语句:可以快速的建表空间,用户并且赋权,由于我现在的项目并不是很严谨,所以像临时表空间,oracle的权限分配等细节,在这里会被忽略. 由于10g开始,oracle的控制台改成网页形式,不但界面改变而且相对的速度也慢了许多,所以我喜欢用命令