我们将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. Sqlserver 连接oracle和mysql数据库 已经oracle导入sqlserver表数据

    SQL Server2012创建连接服务器到ORACLE11G 8,百思考不知道原因啊??突然我发现如下:链接服务器—〉访问接口—〉OraOLEDB.Oracle—〉允许进程内没有勾上,但是我想上面的 ...

  2. Oracle数据库之创建表空间与用户

    Oracle数据库之创建表空间与用户 一.创建表空间 基本语法表述: CREATE TABLESPACE tablespace_name [DATAFILE datafile_spec1 [,data ...

  3. SqlServer表EXCEL数据复制的另一种方法

    一个.SqlServer表中的数据复制到excel 1.新建查询,用sql语句把表数据读出来 2.然后,选择数据,右键.复制(也能够点击连同标题复制),拷贝到记事本中(不然会乱码) 3.然后再把记事本 ...

  4. Oracle性能优化顺序表名称来选择最有效的学习笔记

    选择最有效的顺序表名(只有有效的基于规则的优化)  ORACLE分析器按照订单处理从右到左FROM在FROM子句中的表名,故FROM写在最后的表(基础表 driving table)将被最先处理. 在 ...

  5. Oracle实践--PL/SQL表分区的基础

    PL/SQL基础入门之表分区 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言.是对SQL的扩展.支 ...

  6. Oracle数据库自带表或者视图

    dba_开头 dba_users 数据库用户信息 dba_segments 表段信息 dba_extents 数据区信息 dba_objects 数据库对象信息 dba_tablespaces 数据库 ...

  7. Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ578473688/article/details/54561397 思路1:采用备份表 备份表中 ...

  8. (原)将Oracle迁移到SQLServer

    背景:中了一个标,Oracle改成SQLServer解决办法: 1.首先想到微软的解决方案:Microsoft SQL Server Migration Assistant v7.4 for Orac ...

  9. 将Oracle数据,以及表结构如何传输至MySQL

    最近研究数据库,将Oracle数据库中的表结构以及数据传输给MySQL数据库,自己通过学习采用两种方式,效率较高. 方式一:Navicat 自从下载了Navicat,真的发现这是一款操作数据库十分优秀 ...

随机推荐

  1. 广东省-IT红黑榜排名公司名称

    红榜Top100 Order Company Name Point Change  1 百富计算机技术(深圳)有限公司  94.00 --  2 中国网通广州分公司  88.00 --  3 深圳市汇 ...

  2. swift学习一:介绍,开发文档下载

    在今天wwdc2014公布会上.苹果今天公布了全新的编程语言Swift以及新版Xcode.对于开发人员来说,Swift包括了非常多开发人员喜欢的功能,能够与Objective-C和C语言共同工作.Sw ...

  3. 搭建solr单机版

    solr单机版的搭建 一.solr单机版的搭建 1.运行环境 solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(ja),本教va写 ...

  4. hdu 4885 (n^2*log(n)推断三点共线建图)+最短路

    题意:车从起点出发,每次仅仅能行驶L长度,必需加油到满,每次仅仅能去加油站或目的地方向,路过加油站就必需进去加油,问最小要路过几次加油站. 開始时候直接建图,在范围内就有边1.跑最短了,再读题后发现, ...

  5. easyui出口excel无法下载框弹出的办法来解决

    使用前ajax发,码如下面(ActionUrl一般处理程序ashx路径): $.ajax({ url: ActionUrl + '?action=export&ID=' + $('#fm_ID ...

  6. Sql Server函数全解<五>之系统函数

    原文:Sql Server函数全解<五>之系统函数  系统信息包括当前使用的数据库名称,主机名,系统错误消息以及用户名称等内容.使用SQL SERVER中的系统函数可以在需要的时候获取这些 ...

  7. mysql多实例的配置(转)

    1.创建多实例的目录: mkdir -p /data/mysql/mysql_3307/{data,tmp,logs} mkdir -p /data/mysql/mysql_3308/{data,tm ...

  8. 在MyEclipse8.5中配置Tomcat6.0服务器

    一.单击工具栏的的黑小三角,选择—>Configure Server,出现首选项对话框,在对话框的左边框中找到MyEclipse—>Application Servers下找到Tomcat ...

  9. Java 抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families ...

  10. python 调用图灵机器人api实现简单的人机交互

    接入流程例如以下,须要先注冊开发人员帐号,之后会得到一个32位的key,保存下来,用于以后发送数据.http://www.tuling123.com/ 请求方式 演示样例: # -*- coding: ...