【问题标题】:Compare or match values in an oracle table to data in an excel document将 oracle 表中的值与 excel 文档中的数据进行比较或匹配
【发布时间】:2013-12-05 12:00:11
【问题描述】:

我有一个 Oracle 数据库,其中包含一个名为“Persons”的表。它包含您期望的数据,例如 Person_ID、姓名、地址、电话号码等...

我也有一个包含类似数据的 excel 文档。我需要为将来的潜在迁移任务进行一些调查工作。 excel 文档没有任何唯一的 ID 样式标识符,只有姓名/地址/电话号码。

我的想法是尝试将 Oracle 表导出为 .xls/.csv 并尝试将其与 excel 文档进行比较/突出显示匹配。有没有办法做到这一点?我认为还有一种方法可以导出表格?

谢谢!

【问题讨论】:

  • 您使用什么工具? PLSQL Developer 可以将表格数据直接导出到 Excel 文件,而 SQL Developer 可以将其导出为简单的 .txt 文件。
  • 我有最新的 SQL 开发者,我认为它有 .csv 导出选项。
  • 我宁愿考虑将 Excel 数据导入数据库,因为 SQL 和 PL/SQL 为您提供了更通用的数据比较和合并工具。
  • 是的,我就是这么想的。知道最好的方法吗?

标签: sql oracle excel match string-comparison


【解决方案1】:

这样做的一种方法是:

首先在 Oracle 中创建一个表,您可以在其中将 excel 数据插入数据库。你可以使用这样的东西:

CREATE TABLE excel_dump AS SELECT * FROM Persons WHERE 1 = 0;

然后在 excel 中,您可以创建一个列来保存插入语句 - 因此,如果列 A 保存 Person_ID 值并且列 B 保存名称值,那么对于第一行,您可以使用:

="INSERT INTO excel_dump (Person_ID, name) VALUES ( "&A1&", '"&SUBSTITUTE(B1,"'", "''") &"' );"

根据需要添加更多列(数字字段可以毫无问题地连接起来,根据 A1 单元格,但文本字段应包含在 SUBSTITUTE( ?, "'", "''" ) 中,以便数据中的任何单引号都被转义,根据B1 单元格)。然后为每一行复制它。

将从这些行生成的插入语句复制并粘贴到您最喜欢的 oracle 客户端(SQL Developer / SQL*Plus / Toad 等)以填充 excel_dump 表。

然后你可以做任何你想要比较这两个表的调查。因此,如果您想查看 excel 电子表格中与 Persons 表中的行不匹配的行,那么您可以执行以下操作:

SELECT Person_ID, Name FROM excel_dump
MINUS
SELECT Person_ID, Name FROM Persons;

或者一些你认为合适的更复杂的分析。

交替

如果您使用的是 SQL Developer,则可以选择import data from an Excel spreadsheet

【讨论】:

  • 太好了,我会试试这个。尽管 P_ID 不是一个选项,但由于 excel 文档没有唯一标识符。也许我误解了你的例子?我将首先尝试 SQL 开发人员选项,看看效果如何。谢谢。
  • 只需使用您拥有/需要的列 - 您可以根据需要定制查询以处理部分或全部列,因此您无需担心是否缺少列优秀。
【解决方案2】:

在我看来,这很适合 ETL 工具。我个人很喜欢他们的开源 Community edition 中提供的 Pentaho 数据集成实用程序,但在同一个市场上有很多选择。

【讨论】:

    猜你喜欢
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多