【问题标题】:How to get data from Oracle SQL dump如何从 Oracle SQL 转储中获取数据
【发布时间】:2017-03-28 19:15:15
【问题描述】:

我有一个从 Oracle 数据库中转储的 .sql 文件(包含用于创建表和插入数据的 SQL 语句的文本文件)。

我希望将数据(或至少部分数据)导入 MySQL 数据库。由于某些特定的数据类型,正常导入不起作用。

我该怎么办?我的猜测:

  1. 以某种方式创建一个 Oracle 数据库,导入转储,然后发出 SQL 请求以提取数据。如果是这样,我必须买东西吗?我是否必须为 Oracle 数据库制作单独的虚拟机?
  2. 查找特定于 Oracle 的内容并将其替换为 MySQL 可以理解的内容。如果是这样,是否有任何标准方法可以翻译 VARCHAR2 之类的内容?

【问题讨论】:

  • .sql 没有向我们提供有关其中包含的数据的任何信息。您可能会说“我有一个 .txt 文件”来说明它的所有用途。文件中包含什么样的信息?请更新您的问题以包含文件内容的示例。我之所以问,是因为您使用“转储”一词意味着内容是通过导出或数据泵导出 (expdp) 创建的,但您的问题的其余部分则暗示其他内容。
  • @Boneist 对不起,我编辑了。它包含 SQL 语句。我没有具体说明,因为根据我的经验,每个数据库转储为 SQL 格式都是包含纯文本 SQL 语句的文件,它重新创建数据库结构并将数据插入其中。

标签: mysql oracle import


【解决方案1】:

原来你可以翻译 Oracle 到 MySQL。这是一个参考页面:Oracle to MySQL Migration - SQLines

就我而言,我必须将 NUMBER(13,0) 翻译成 BIGINTNUMBER(12,2) 翻译成 DECIMAL(12,2)

在大表中没有明确说明(但在下面提到)是 Oracle 语法指定了 varchar 大小的单位。所以我把VARCHAR2(4000 BYTE)翻译成了VARCHAR(4000)

在我的文件中使用了to_timestamp 函数。内置函数表没有说明要做什么,但我将其替换为str_to_date,因为结果写入了DATETIME 字段。

我也有微秒被排除在 to_date reference on SQLines 之外。在一天结束时,to_timestamp('01-JAN-00 12.00.13.130000000 AM','DD-MON-RR HH.MI.SSXFF AM') 变为 str_to_date('01-JAN-00 12.00.13.130000000','%d-%b-%y %h.%i.%s.%f')

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2016-11-14
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    相关资源
    最近更新 更多