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;
版权声明:本文博客原创文章,博客,未经同意,不得转载。
相关文章
- SQLServer 错误 208 对象名 ‘%.*ls’ 无效。 故障 处理 修复 支持远程
- 架构灵活可扩展:Oracle 多实例多库架构实现(oracle多实例多库)
- Oracle索引失效:深入分析与解决策略(索引失效oracle)
- Oracle基础架构:建设优秀、稳定高效的数据管理体系(oracle基础架构)
- Oracle转化为SQL Server的实践经验(oracle转sqlserver)
- Oracle 查看索引数据的实用技巧(oracle查看索引数据)
- 探索Oracle中间件技术,优化企业信息化建设(中间件oracle)
- SQL Server参数优化技巧(SQL Server Parameter Optimization Tips)(sqlserver参数)
- 激活SQL Server:保障数据安全运行(激活sqlserver)
- SQL Server给IP安装设置指南(sqlserver用ip)
- 性能测试SQL Server期末性能测试:提升系统效率的利器(sqlserver期末)
- 管理SQL Server服务端管理的秘密(sqlserver服务端)
- 解决Oracle数据库锁表频繁出现难题(oracle出现频繁锁表)
- Oracle实现全球合并系统建设新时代(oracle全球合并系统)
- 警惕Oracle全局索引的弊端(oracle全局索引陷阱)
- 以Ldm和Oracle技术建设安全可靠的信息系统(ldm oracle)
- 库如何使用C语言打印Oracle数据库的记录(c 打印oracle数据)
- 海量CSV文件快速倒入Oracle数据库(csv倒入oracle)
- 给Oracle的GMON服务带去一片欢笑吧(gmon oracle)
- Oracle从什么时候开始免费(oracle什么之前免费)
- 拥有Oracle专业货源诚挚欢迎光临Oracle专卖店(oracle专卖店)