我们将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. [Node.js] Level 6. Socket.io

    6.2 Setting Up socket.io Server-Side So far we've created an Express server. Now we want to start bu ...

  2. <The Art of Readable Code> 笔记一

    第1章  代码应易理解 (Code should be easy to understand) 基本原则:好的代码,能够减少 “别人” 理解它的时间. “别人” 不仅指的是 “其它人”,也可能是 “以 ...

  3. SQLServer 之 聚合函数

    一.聚合函数介绍 1.聚合函数最常用的: (1) COUNT:求个数 count函数用于计算满足条件的数据项数,返回int数据类型的值. [1] 语法结构:COUNT( {[[ all | disti ...

  4. http协议中content-length 以及chunked编码分析

    转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8269922 0.序 1.http/1.1协议中与chunked编码的相关字段 1)E ...

  5. es5 - array - shift

    /** * 描述:该shift()方法从数组中删除第一个元素并返回已删除的元素.此方法更改数组的长度. * 语法:arr.shift() * 返回:该shift方法删除零点索引处的元素并将连续索引处的 ...

  6. 浅析JDK中ServiceLoader的源码

    前提 紧接着上一篇<通过源码浅析JDK中的资源加载>,ServiceLoader是SPI(Service Provider Interface)中的服务类加载的核心类,也就是,这篇文章先介 ...

  7. Install fail! Error: [@@babel/runtime/core-js/object/keys]

    1.Install fail! Error: [@@babel/runtime/core-js/object/keys] "@babel/runtime": "7.0.0 ...

  8. vlc模块间共享变量

    在模块中创建变量: vlc_value_t  valTemp; var_Create( p_intf, "vlc_test", VLC_VAR_STRING  ); valTemp ...

  9. sql server 操作xml例子

    sql server 操作xml例子 /* sql xml 入门: --by jinjazz --http://blog.csdn.net/jinjazz 1.xml: 能认识元素.属性和值 2.xp ...

  10. &lt;LeetCode OJ&gt; 78 / 90 Subsets (I / II)

    Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must ...