Oracle拉出在sqlserver建表的语句
我们将Oracle数据同步到sqlserver时,是先得在sqlserver端建表的。
复杂的字段我们不同步,就仅仅考虑以下四种数据类型。
以下是从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建表的语句的更多相关文章
- Oracle获取干净的建表DDL语句,不含其它存储、表空间、段属性
早上一个同事资讯怎么获取到建表语句而且是不带存储那种SQL.Oracle自己提供了一个函数DBMS_METADATA.GET_DDL,但是获取到的建表语句含有存储.表空间.以及一些其他段的属性.如图: ...
- 抓取oracle建表语句及获取建表ddl语句
抓取oracle建表语句及获取建表ddl语句 1.抓取代码如下: 1.1.产生表的语法资料 DECLARE-- v_notPartTable VARCHAR2(1000):= '&2'; -- ...
- Oracle 自动生成hive建表语句
从 oracle 数据库导数到到 hive 大数据平台,需要按照大数据平台的数据规范,重新生成建表的 SQL 语句,方便其间,写了一个自动生成SQL的存储过程. ① 创建一张表,用来存储源表的结构,以 ...
- oracle之 获取建表ddl语句
第一种方法是使用工具,如:pl/sql developer,在[工具]--[导出用户对象]出现就可以得到建表脚本. 第二种方法是,sql语句. DBMS_METADATA.GET_DDL包可以得到数据 ...
- 1-基本建表sql语句
基本的建表语句的总结 --建表语法 CREATE TABLE 表名( --约束可以没有 列名1 数据类型 [约束], 列名2 数据类型 [约束], ......, [约束], ..... ); --该 ...
- [04] 利用注解生成实体类对应的建表sql语句
1.实现功能 我们已经对注解有了基本的认识,知道了如何自定义注解,如何使用和最基本的处理注解. 本篇主要介绍,如何使用运行时级别的注解,配合反射来自动生成建表的sql语句.如下例: 我们有实体类Stu ...
- sqlserver 建表语句,获取建表语句的存储过程,包括排序规则,索引,字段说明,支持同时生成多个表
先创建一个分割表名的分割函数 --表值函数用以截取字符串 --如果为其添加一列主键id,则其顺序就会固定了 create FUNCTION [Split](@text NVARCHAR(max)) ) ...
- 获取oracle的建表DLL语句
get_ddl('TABLE','表名','实例名') from dual select dbms_metadata.get_ddl('TABLE','RMS_CITY','RMS') from ...
- Oracle 12c 建表空间语句
create tablespace TBS_DYS datafile 'D:/Oracle_12c/app/dingyingsi/oradata/dingyingsi/TBS_DYS.ba' size ...
随机推荐
- [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 ...
- [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 ...
- C#应用视频教程3.2 Halcon软件测试
Halcon是图像处理比较牛逼的一个软件(德国人的东西,做的非常强大,里面集成的算法很多,可能你一辈子研究这个也做不过他),然而牛逼归牛逼,康耐视,基恩士也很牛逼,但是日本人的东西一般太过封闭,屌丝用 ...
- HDU1004——Let the Balloon Rise
Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...
- leetCode(29):Happy Number
Write an algorithm to determine if a number is "happy". A happy number is a number defined ...
- 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操作她都可以通过编程的 ...
- Spring 泛型依赖注入
BaseService<T>:有RoleService和UserService两的子类 BaseRepepositry<T>:有UserRepository和RoleRepos ...
- python3.X中简单错误处理,和Python2区别
1.print 1.1 Print是一个函数 在Python3中print是个函数,这意味着在使用的时候必须带上小括号,并且它是带有参数的. >>> print 'hello wor ...
- 基于Python Tornado的在线问答系统
概述 本项目使用最新的Tornado开发.实现了在线提问,回答,评论等功能.使用到Tornado的generator,长轮询等等技术, 支持MySQL的异步连接. 详细 代码下载:http://www ...
- css background-position结合disaply:inline-block使用
$(".icon-a").on('click', function (e) { if ($(this).next().css('display') == "none&qu ...