我们将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建表的语句的更多相关文章

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

    早上一个同事资讯怎么获取到建表语句而且是不带存储那种SQL.Oracle自己提供了一个函数DBMS_METADATA.GET_DDL,但是获取到的建表语句含有存储.表空间.以及一些其他段的属性.如图: ...

  2. 抓取oracle建表语句及获取建表ddl语句

    抓取oracle建表语句及获取建表ddl语句 1.抓取代码如下: 1.1.产生表的语法资料 DECLARE-- v_notPartTable VARCHAR2(1000):= '&2'; -- ...

  3. Oracle 自动生成hive建表语句

    从 oracle 数据库导数到到 hive 大数据平台,需要按照大数据平台的数据规范,重新生成建表的 SQL 语句,方便其间,写了一个自动生成SQL的存储过程. ① 创建一张表,用来存储源表的结构,以 ...

  4. oracle之 获取建表ddl语句

    第一种方法是使用工具,如:pl/sql developer,在[工具]--[导出用户对象]出现就可以得到建表脚本. 第二种方法是,sql语句. DBMS_METADATA.GET_DDL包可以得到数据 ...

  5. 1-基本建表sql语句

    基本的建表语句的总结 --建表语法 CREATE TABLE 表名( --约束可以没有 列名1 数据类型 [约束], 列名2 数据类型 [约束], ......, [约束], ..... ); --该 ...

  6. [04] 利用注解生成实体类对应的建表sql语句

    1.实现功能 我们已经对注解有了基本的认识,知道了如何自定义注解,如何使用和最基本的处理注解. 本篇主要介绍,如何使用运行时级别的注解,配合反射来自动生成建表的sql语句.如下例: 我们有实体类Stu ...

  7. sqlserver 建表语句,获取建表语句的存储过程,包括排序规则,索引,字段说明,支持同时生成多个表

    先创建一个分割表名的分割函数 --表值函数用以截取字符串 --如果为其添加一列主键id,则其顺序就会固定了 create FUNCTION [Split](@text NVARCHAR(max)) ) ...

  8. 获取oracle的建表DLL语句

    get_ddl('TABLE','表名','实例名') from dual   select dbms_metadata.get_ddl('TABLE','RMS_CITY','RMS') from ...

  9. Oracle 12c 建表空间语句

    create tablespace TBS_DYS datafile 'D:/Oracle_12c/app/dingyingsi/oradata/dingyingsi/TBS_DYS.ba' size ...

随机推荐

  1. [Algorithm -- Dynamic programming] How Many Ways to Decode This Message?

    For example we have 'a' -> 1 'b' -> 2 .. 'z' -> 26 By given "12", we can decode t ...

  2. [Node.js] 4. Modules

    4.2 Missing Exports Notice the two different files: high_five.js on the left side andapp.js on the r ...

  3. C#应用视频教程3.2 Halcon软件测试

    Halcon是图像处理比较牛逼的一个软件(德国人的东西,做的非常强大,里面集成的算法很多,可能你一辈子研究这个也做不过他),然而牛逼归牛逼,康耐视,基恩士也很牛逼,但是日本人的东西一般太过封闭,屌丝用 ...

  4. HDU1004——Let the Balloon Rise

    Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...

  5. leetCode(29):Happy Number

    Write an algorithm to determine if a number is "happy". A happy number is a number defined ...

  6. 2.4.1 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数

    NPOI教程:http://www.cnblogs.com/atao/archive/2009/11/15/1603528.html 之所有说NPOI强大,是因为常用的Excel操作她都可以通过编程的 ...

  7. Spring 泛型依赖注入

    BaseService<T>:有RoleService和UserService两的子类 BaseRepepositry<T>:有UserRepository和RoleRepos ...

  8. python3.X中简单错误处理,和Python2区别

    1.print 1.1 Print是一个函数 在Python3中print是个函数,这意味着在使用的时候必须带上小括号,并且它是带有参数的. >>> print 'hello wor ...

  9. 基于Python Tornado的在线问答系统

    概述 本项目使用最新的Tornado开发.实现了在线提问,回答,评论等功能.使用到Tornado的generator,长轮询等等技术, 支持MySQL的异步连接. 详细 代码下载:http://www ...

  10. css background-position结合disaply:inline-block使用

    $(".icon-a").on('click', function (e) { if ($(this).next().css('display') == "none&qu ...