首页 > 数据库 >oracle表导出mysql适用的脚本方法

oracle表导出mysql适用的脚本方法

时间:2024-05-07 15:33:05浏览次数:25  
标签:INDEX NAME TABLENAME mysql 导出 CHR SQL oracle TABLE

oracle表导出mysql适用的脚本方法
1.在对应的oracle数据库plsql中执行下面代码,建F_LIMS_GET_SQL_FOR_MYSQL函数
CREATE OR REPLACE FUNCTION F_LIMS_GET_SQL_FOR_MYSQL(PI_TABLENAME IN VARCHAR2,
PI_ISDROP IN INTEGER := 1)
RETURN CLOB IS
V_TABLENAME VARCHAR(100);
V_RET_SQL VARCHAR2(4000);
V_SQL_HEADER VARCHAR2(1000);
V_SQL_BODY CLOB;
V_SQL_INDEX VARCHAR2(4000);
V_SQL_TABLE_COMMENT VARCHAR(400);
V_SQL_PK_COL_LIST VARCHAR(1000);
-- 根据当前数据库和表名,生成mysql建表语句
BEGIN
-- 表名统一为大写
SELECT UPPER(PI_TABLENAME) INTO V_TABLENAME FROM DUAL;

SELECT MAX(T.COMMENTS)
INTO V_SQL_TABLE_COMMENT
FROM USER_TAB_COMMENTS T
WHERE T.TABLE_NAME = V_TABLENAME;

SELECT MAX(WM_CONCAT('`' || A.COLUMN_NAME || '` '))
INTO V_SQL_PK_COL_LIST
FROM USER_CONS_COLUMNS A, USER_CONSTRAINTS B
WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND B.CONSTRAINT_TYPE = 'P'
AND A.TABLE_NAME = V_TABLENAME
GROUP BY A.TABLE_NAME;

V_SQL_HEADER := '-- ' || V_SQL_TABLE_COMMENT || ' 建表语句' || CHR(13);

IF PI_ISDROP = 1 THEN
V_SQL_HEADER := V_SQL_HEADER || 'DROP TABLE IF EXISTS `' || V_TABLENAME || '`;' ||
CHR(13);
END IF;
V_SQL_HEADER := V_SQL_HEADER || 'CREATE TABLE `' || V_TABLENAME || '` (';

-- 表列信息
SELECT WM_CONCAT(CHR(13) || '`' || T.COLUMN_NAME || '` ' ||
(CASE
WHEN T.DATA_TYPE = 'VARCHAR2' OR T.DATA_TYPE = 'NVARCHAR2' THEN
'VARCHAR(' || T.DATA_LENGTH || ')'
WHEN T.DATA_TYPE = 'DATE' THEN
'DATETIME'
WHEN T.DATA_TYPE = 'CLOB' THEN
'MEDIUMTEXT'
WHEN T.DATA_TYPE = 'NUMBER' THEN
'DECIMAL'
WHEN T.COLUMN_NAME = 'ID' THEN
'VARCHAR(32)'
ELSE
T.DATA_TYPE
END) || DECODE(T.NULLABLE, 'N', ' NOT NULL ', '') ||
' COMMENT ''' || TC.COMMENTS || '''')
INTO V_SQL_BODY
FROM USER_TAB_COLUMNS T
LEFT JOIN USER_COL_COMMENTS TC
ON T.TABLE_NAME = TC.TABLE_NAME
AND T.COLUMN_NAME = TC.COLUMN_NAME
WHERE T.TABLE_NAME = V_TABLENAME
ORDER BY T.COLUMN_ID;

IF V_SQL_PK_COL_LIST IS NOT NULL THEN
V_SQL_BODY := V_SQL_BODY || ' ,' || CHR(13) || ' PRIMARY KEY (' ||
V_SQL_PK_COL_LIST || ') ';
END IF;

-- 表备注
V_SQL_BODY := V_SQL_BODY || CHR(13) || ') COMMENT = ''' ||
V_SQL_TABLE_COMMENT || ''';' || CHR(13);

-- 唯一索引
SELECT (WM_CONCAT('@ALTER TABLE `' || A.TABLE_NAME ||
'` ADD UNIQUE INDEX (' ||
WM_CONCAT('`' || A.COLUMN_NAME || '`') || ');@'))
INTO V_SQL_INDEX
FROM USER_CONS_COLUMNS A, USER_CONSTRAINTS B
WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND B.CONSTRAINT_TYPE = 'U'
AND A.TABLE_NAME = V_TABLENAME
GROUP BY A.TABLE_NAME, A.CONSTRAINT_NAME;

IF V_SQL_INDEX IS NOT NULL THEN
V_SQL_INDEX := REPLACE(REPLACE(V_SQL_INDEX, '@,@', CHR(13)), '@', '');
V_SQL_INDEX := '-- 创建索引' || CHR(13) || V_SQL_INDEX;
END IF;

RETURN V_SQL_HEADER || V_SQL_BODY || V_SQL_INDEX;
END;


2.执行下面代码一个个导出表结构脚本
SELECT F_LIMS_GET_SQL_FOR_MYSQL('表名',0) FROM DUAL;

标签:INDEX,NAME,TABLENAME,mysql,导出,CHR,SQL,oracle,TABLE
From: https://www.cnblogs.com/cinemaparadiso/p/18177456

相关文章

  • Mysql-事务的基本特性和隔离级别
    0.背景在数据库中,事务是一组数据库操作,可以将事务操作视为一个基本的工作单元。1.事务的基本特性事务的基本特性“ACID”对于事务呢,就是这一组sql操作,要确保ACID这4个基本特性。哎,八股文不好背,我记忆方式是:一元吃个(原持隔)原子性(Atomicity):事务中的所有操作要么全部执行成功,......
  • MySQL-基础语法教程
    基础解析:select要几列where要几行,用来对行进行过滤,加where,查出来的行变少*代表所有的列    增删改查 UPDATESET更新UPDATEscoresSETscore=300WHERENAME="王大"ANDkemu="语文"     delete语法DELETEFROMscoresWHEREID=11 #删除......
  • mysql索引使用基础
    1.创建&删除MySQL可以通过CREATE、ALTER、DDL三种方式创建一个索引。在MySQL中,使用CREATEINDEX语句可以创建索引。具体语法如下:CREATEINDEXindexNameONtableName(columnName(length)[ASC|DESC]);其中,indexName是索引的名称,tableName是要在其上创建索引的表名,column......
  • Linux非root用户安装mysql(5.7)
    1、下载安装包···········2、安装MySQL解压:tarxzvfmysql-5.7.31-linux-glibc2.12-x86_64.tar.gzmvmysql-5.7.31-linux-glibc2.12-x86_64mysql配置my.cnf文件:cat>>my.cnf<<EOF[mysqld]basedir=/app/mysqldatadir=/app/mysql/dataport=3333s......
  • openGauss 导出数据库
    导出数据库openGauss支持使用gs_dump工具导出某个数据库级的内容,包含数据库的数据和所有对象定义。可根据需要自定义导出如下信息:导出数据库全量信息,包含数据和所有对象定义。使用导出的全量信息可以创建一个与当前库相同的数据库,且库中数据也与当前库相同。仅导出所有对......
  • openGauss 导出所有数据库-11
    导出所有数据库openGauss支持使用gs_dumpall工具导出所有数据库的全量信息,包含openGauss中每个数据库信息和公共的全局对象信息。可根据需要自定义导出如下信息:导出所有数据库全量信息,包含openGauss中每个数据库信息和公共的全局对象信息(包含角色和表空间信息)。使用导出的全......
  • openGauss 导出模式
    导出模式openGauss目前支持使用gs_dump工具导出模式级的内容,包含模式的数据和定义。用户可通过灵活的自定义方式导出模式内容,不仅支持选定一个模式或多个模式的导出,还支持排除一个模式或者多个模式的导出。可根据需要自定义导出如下信息:导出模式全量信息,包含数据和对象定义。......
  • openGauss 导出全局对象
    导出全局对象openGauss支持使用gs_dumpall工具导出所有数据库公共的全局对象,包含数据库用户和组,表空间及属性(例如:适用于数据库整体的访问权限)信息。操作步骤以操作系统用户omm登录数据库主节点。使用gs_dumpall导出表空间对象信息。gs_dumpall-Uomm-f/home/omm/backu......
  • openGauss 导出表
    导出表openGauss支持使用gs_dump工具导出表级的内容,包含表定义和表数据。视图、序列和外表属于特殊的表。用户可通过灵活的自定义方式导出表内容,不仅支持选定一个表或多个表的导出,还支持排除一个表或者多个表的导出。可根据需要自定义导出如下信息:导出表全量信息,包含表数据和表......
  • C#/C++ 通过ODBC连接OceanBase Oracle租户
    概述近期我们项目正处于将Oracle数据库迁移到OceanBaseOracle租户模式的阶段。考虑到我们项目采用了C++和C#混合开发,并且使用了多种技术,因此存在多种数据库连接方式。然而,针对C#连接OceanBase的案例相对较少,因此我特意记录下这一过程。开放数据库互连(ODBC)是微软公司开放服务结......