转载自:https://www.cnblogs.com/chinesern/p/9127970.html

1. fnc_table_to_mysql 主体程序

create or replace function fnc_table_to_mysql
( i_owner                       in string,  i_table_name                  in string,  i_number_default_type         in string := 'decimal',  i_auto_incretment_column_name in string := '%ID'
)
/*  功能:ORACLE表生成MYSQL建表DDL  作者:叶正盛 2013-07-27  新浪微博:@yzsind-叶正盛  参数说明:  i_owner:schema名  i_table_name:表名  i_number_default_type:NUMBER默认转换的类型,缺省是decimal  i_auto_incretment_column_name:自增属性字段名称规则,默认是%ID  已知问题:  1.不支持分区  2.不支持函数索引,位图索引等特殊索引定义  3.不支持自定义数据类型,不支持ROWID,RAW等特殊数据类型  4.不支持外键  5.不支持自定义约束  6.不支持与空间、事务相关属性  7.DATE与TIMESTAMP转换成datetime,需注意精度  8.超大NUMBER直接转换为bigint,需注意精度  9.auto incretment 是根据字段名规则加一些判断,设置不一定准确,需检查  */  return clob is  Result         clob;  cnt            number;  data_type      varchar2(128);  column_str     varchar2(4000);  pk_str         varchar2(4000);  table_comments varchar2(4000);  is_pk_column   number := 0;
begin  select count(*)  into cnt  from all_tables  where owner = i_owner  and table_name = i_table_name;  if (cnt = 0) then  RAISE_APPLICATION_ERROR(-20000,'can''t found table,please check input!');  else  Result := 'CREATE TABLE `' || lower(i_table_name) || '`(';  --column  for c in (select a.column_name,  a.data_type,  a.data_length,  a.data_precision,  a.data_scale,  a.nullable,  a.data_default,  b.COMMENTS  from all_tab_cols a, all_col_comments b  where a.owner = i_owner  and a.table_name = i_table_name  and a.HIDDEN_COLUMN = 'NO'  and a.owner = b.OWNER  and a.TABLE_NAME = b.TABLE_NAME  and a.COLUMN_NAME = b.COLUMN_NAME  order by a.column_id) loop  if (c.data_type = 'VARCHAR2' or c.data_type = 'NVARCHAR2') then  data_type := 'varchar(' || c.data_length || ')';  elsif (c.data_type = 'CHAR' or c.data_type = 'NCHAR') then  data_type := 'char(' || c.data_length || ')';  elsif (c.data_type = 'NUMBER') then  if (c.column_name like '%ID' and c.data_scale is null) then  data_type := 'bigint';  elsif (c.data_precision<3 and c.data_scale = 0) then  data_type := 'tinyint';  elsif (c.data_precision<5 and c.data_scale = 0) then  data_type := 'smallint';  elsif (c.data_precision<10 and c.data_scale = 0) then  data_type := 'int';  elsif (c.data_precision is not null and c.data_scale = 0) then  data_type := 'bigint';  elsif (c.data_precision is not null and c.data_scale is not null) then  data_type := 'decimal(' || c.data_precision || ',' ||  c.data_scale || ')';  else  data_type := i_number_default_type;  end if;  elsif (c.data_type = 'DATE' or c.data_type like 'TIMESTAMP%') then  data_type := 'datetime';  elsif (c.data_type = 'CLOB' or c.data_type = 'NCLOB' or  c.data_type = 'LONG') then  data_type := 'text';  elsif (c.data_type = 'BLOB' or c.data_type = 'LONG RAW') then  data_type := 'blob';  elsif (c.data_type = 'BINARY_FLOAT') then  data_type := 'float';  elsif (c.data_type = 'BINARY_DOUBLE') then  data_type := 'double';  else  data_type := c.data_type;  end if;  column_str := '  `' || lower(c.column_name) || '` ' || data_type;  if (c.column_name like i_auto_incretment_column_name and  (c.data_scale is null or c.data_scale = 0)) then  select count(*)  into is_pk_column  from all_constraints a, all_cons_columns b  where a.owner = i_owner  and a.table_name = i_table_name  and a.constraint_type = 'P'  and a.OWNER = b.OWNER  and a.TABLE_NAME = b.TABLE_NAME  and a.CONSTRAINT_NAME = b.CONSTRAINT_NAME  and b.COLUMN_NAME = c.column_name;  if is_pk_column > 0 then  column_str := column_str || ' AUTO_INCREMENT';  end if;  end if;  if c.nullable = 'NO' then  column_str := column_str || ' NOT NULL';  end if;  if (trim(c.data_default) is not null) then  column_str := column_str || ' DEFAULT ' ||  trim(replace(replace(c.data_default, chr(13), ''),  chr(10),  ''));  end if;  if c.comments is not null then  column_str := column_str || ' COMMENT ''' || c.comments || '''';  end if;  Result := Result || chr(10) || column_str || ',';  end loop;  --pk  for c in (select a.constraint_name, wm_concat(a.column_name) pk_columns  from (select a.CONSTRAINT_NAME,  '`' || b.COLUMN_NAME || '`' column_name  from all_constraints a, all_cons_columns b  where a.owner = i_owner  and a.table_name = i_table_name  and a.constraint_type = 'P'  and a.OWNER = b.OWNER  and a.TABLE_NAME = b.TABLE_NAME  and a.CONSTRAINT_NAME = b.CONSTRAINT_NAME  order by b.POSITION) a  group by a.constraint_name) loop  Result := Result || chr(10) || '  PRIMARY KEY (' ||  lower(c.pk_columns) || '),';  end loop;  --unique  for c in (select a.constraint_name, wm_concat(a.column_name) uk_columns  from (select a.CONSTRAINT_NAME,  '`' || b.COLUMN_NAME || '`' column_name  from all_constraints a, all_cons_columns b  where a.owner = i_owner  and a.table_name = i_table_name  and a.constraint_type = 'U'  and a.OWNER = b.OWNER  and a.TABLE_NAME = b.TABLE_NAME  and a.CONSTRAINT_NAME = b.CONSTRAINT_NAME  order by b.POSITION) a  group by a.constraint_name) loop  Result := Result || chr(10) || '  UNIQUE KEY `' ||  lower(c.constraint_name) || '`(' || lower(c.uk_columns) || '),';  end loop;  -- index  for c in (select a.index_name, wm_concat(a.column_name) ind_columns  from (select a.index_name,  '`' || a.COLUMN_NAME || '`' column_name  from all_ind_columns a  where a.table_owner = i_owner  and a.TABLE_NAME = i_table_name  and not exists  (select index_name  from all_constraints b  where a.TABLE_OWNER = b.owner  and a.TABLE_NAME = b.TABLE_NAME  and a.INDEX_NAME = b.INDEX_NAME)  order by a.COLUMN_POSITION) a  group by a.index_name) loop  Result := Result || chr(10) || '  KEY `' || lower(c.index_name) || '`(' ||  lower(c.ind_columns) || '),';  end loop;  Result := substr(Result, 1, length(result) - 1) || chr(10) || ')';  --table comments  select max(a.COMMENTS)  into table_comments  from all_tab_comments a  where owner = i_owner  and table_name = i_table_name;  if (table_comments is not null) then  Result := Result || 'COMMENT=''' || table_comments || '''';  end if;  Result := Result || ';';  end if;  return(Result);
end fnc_table_to_mysql;
/

2 需要转换的oracle 表

CREATE TABLE  "TEST_MYSQL"."UC_CUST_SY_CPZX" (   "BUSI_DATE" NUMBER(*,0), "TRADE_DATE" NUMBER(*,0), "YEAR_ID" NUMBER(*,0), "MONTH_ID" NUMBER(*,0), "DAY_ID" NUMBER(*,0), "CPLX" CHAR(2 BYTE), "CPDM" VARCHAR2(100 BYTE), "PRODUCT_NAME" VARCHAR2(300 BYTE), "DWJZ" NUMBER(19,4) NOT NULL ENABLE, "LJJZ" NUMBER(19,4) NOT NULL ENABLE, "RZZL" NUMBER(19,4) NOT NULL ENABLE, "FQJZ" NUMBER(19,4) NOT NULL ENABLE, "LJJZSYL" NUMBER(19,4) NOT NULL ENABLE, "CPGLMS" NUMBER(*,0));

3 转换

SQL> select dbms_lob.substr(fnc_table_to_mysql('TEST_MYSQL','UC_CUST_SY_CPZX','decimal','ID')) FROM DUAL;
CREATE TABLE `uc_cust_sy_cpzx`(`busi_date` decimal,`trade_date` decimal,`year_id` decimal,`month_id` decimal,`day_id` decimal,`cplx` char(2),`cpdm` varchar(100),`product_name` varchar(300),`dwjz` decimal(19,4),`ljjz` decimal(19,4),`rzzl` decimal(19,4),`fqjz` decimal(19,4),`ljjzsyl` decimal(19,4),`cpglms` decimal
);

ORACLE建表语句转化为MySQL建表语句相关推荐

  1. PowerDesigner,如何将Oracle数据库建表语句转化成Mysql数据库建表语句。

    在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表.表中每个字段的数据类型.中文注释.是否可为NULL 问题,非常影响我们建表的效率.本篇文章,以Oracle数 ...

  2. 关于使用java程序从excel或者数据库中取出建表规则数据,自动生成数据库建表语句(适用于批量建数据库表)

    公司开发新系统,需要创建几百个数据库表,建表的规则已经写好放到Excel中,如果手动创建的话需要占用较长的时间去做,而且字段类型的规则又被放到了另一张表,如果手动去一个一个去匹配就很麻烦,所以我先把两 ...

  3. mysql建表语句增加注释_mysql建表语句加注释

    主表的名称+字符 dtl(detail 缩写) 例如: 采购定单的名称为: po_order, 则采购定单的明细表为: po_orderdtl (7)表必须填写描述信息(使用 SQL 语句建表时... ...

  4. mysql建表语句增加注释_MySQL建表语句+添加注释

    1.建表+注释 CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学号', name VARCHAR(200) COMM ...

  5. PowerDesigner,如何将Mysql数据库建表语句转化成Oracle数据库建表语句。

    在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表.表中每个字段的数据类型.中文注释.是否可为NULL 问题,非常影响我们建表的效率.本篇文章,以Mysql数据 ...

  6. 三种常用的MySQL建表语句(转)

    MySQL建表语句是最基础的SQL语句之一,下面就为您介绍最常用的三种MySQL建表语句,如果您对MySQL建表语句方面感兴趣的话,不妨一看. 1.最简单的: CREATE TABLE t1(     ...

  7. Oracle 建表语句的关键字详解

    目录 一.建表语句 二.关键字详解 1. ENABLE 和 DISABLE 2. 创建主键约束 3. USING INDEX 4. PCTFREE 5. PCTUSED 6. INITRANS 和 M ...

  8. 数据库mysql自建模拟购物系统(建表语句、检索语句)

    题目:购物系统数据库设计 一.场景描述 随着互联网的普及,越来越多的人选择网上购物.购物系统已经成为了必然趋势,购物系统的主要资源是商品.商品由用户从网上查看价格.品质.评论等选择商品,用户下单付款后 ...

  9. postgres 命令行建数据库表_Postgresql 查看建表语句 命令

    Mysql查看建表语句以及修改引擎 更多内容推荐微信公众号,欢迎关注: 1 查看系统支持的存储引擎 show engines; 2 查看表使用的存储引擎 两种方法: a.show table stat ...

  10. mysql分片建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解

    前言 本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取 ...

最新文章

  1. 40+场面试,100%通过率,我想分享的 14 条经验
  2. 富士康c语言试卷答案,2015富士康笔试题目及答案
  3. 操作符和表达式的问题总结
  4. cuda11.0 cudnn 11.0 torch1.7.1+cu110 torchvision 0.8.2+cu110 安装包
  5. echarts常用方法(一)
  6. 如何提升企业的数据挖掘能力
  7. Java中使用poi导入、导出Excel
  8. 关于点击button按钮自动刷新页面导致ajax来不及执行的原因
  9. 唧唧Down(B站视频下载) 彻底解决你的B站视频下载问题
  10. kitti数据集label解析和可视化教程
  11. at91rm9200移植u-boot
  12. 双轴旋转云台plc控制_基于STM32的双轴监控云台精准控制系统设计
  13. CIS Benchmarks
  14. 微信小程序input输入框控制金额格式
  15. Linux终端更改字体
  16. 对闰年和平年计算均值
  17. linux平台的mmdetection安装
  18. 玩转Python量化金融工具之NumPy
  19. 一键录屏神器——Captura
  20. 微信获取nickname mysql乱码_微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程...

热门文章

  1. 黑马程序员,黑马论坛---云2期,已就业45人,平均薪水6806【8月23日更新】
  2. 批量复制或提取CAD中的说明文字为表格
  3. 电线直径对照表_电线平方与直径对照表
  4. 网页中插入当前时间和实时天气
  5. 单片机1到十五c语言,手把手教你学单片机的C语言程序设计(十五).pdf
  6. Tomcat的starup.bat报错问题解决
  7. plcst语言编程教程_PLC编程(ST)语言常用语句及功能简介
  8. django开发个人博客系统
  9. eoLinker-API_Shop_知识类API调用的代码示例合集:驾考题库、ISBN书号查询、万年历查询等...
  10. 手把手教,使用VMware虚拟机安装Windows XP系统,爷青回