从Excel文件中提取Oracle数据

时间:2015-03-23 16:37:57

标签: excel oracle

所以excel占用了很多行。我有10,000行左右的数据占用,我正在使用10,000或不同的ID。有没有办法通过将整个ID列作为一个组捕获整个ID列并在WHERE查询中包含该组而不是循环10,000个资产并查询数据库10,000次来查询oracle数据库一次?

很抱歉没有提供代码。我真的没有尝试过这个,因为我不知道是否存在解决方案。

2 个答案:

答案 0 :(得分:0)

你所要求的东西可以通过两个步骤完成。首先,通过为相关ID创建SELECT-FROM-DUAL查询,然后将这些查询输入到主查询中并加入它们以限制只需要的返回。

第一步,使用Excel创建SELECT-FROM-DUAL子查询。
如果您的ID列在单元格A2中开始,请将以下公式复制到同一行上的空单元格中,并将其向下拖动到列中,直到具有ID的所有行也具有公式。如果您的ID不在单元格A2中开始,请更改对单元格A2和A3的引用。

="SELECT "&A2&" AS id FROM DUAL"&IF(NOT(ISBLANK(A3)), " UNION ALL", "")

最终,我们想要的是一个SELECT-FROM-DUAL语句块,如下所示。请注意,最后一个语句不会以" UNION ALL"结尾,但所有其他语句都应该 | ID |公式|
| ----- | ------------------------------------ |
| 1 | SELECT 1 AS id FROM DUAL UNION ALL |
| 2 | SELECT 2 AS id FROM DUAL UNION ALL |
| 3 | SELECT 3 AS id FROM DUAL UNION ALL |
| 4 | SELECT 4 AS id FROM DUAL UNION ALL |
| 5 | SELECT 5 AS id FROM DUAL UNION ALL |
| 6 | SELECT 6 AS id FROM DUAL |

对于第二步,将所有SELECT-FROM-DUAL语句添加到主查询中,然后添加适当的JOIN条件。

SELECT
            *
FROM table_you_need tyn INNER JOIN ( SELECT 1 AS id FROM DUAL UNION ALL SELECT 2 AS id FROM DUAL UNION ALL SELECT 3 AS id FROM DUAL UNION ALL SELECT 4 AS id FROM DUAL UNION ALL SELECT 5 AS id FROM DUAL UNION ALL SELECT 6 AS id FROM DUAL ) your_ids yi ON tyn.id = yi.id ;

如果您有一个较短的ID列表,您可以使用类似的策略为WHERE ids IN (<list_of_numbers>)子句创建ID列表,但IN列表通常限制为100个项目,因此不适用于您当前的问题

答案 1 :(得分:0)

您可以使用Toad或SQL Developer从Excel导入数据。您需要先在数据库中创建一个表。

如果将excel文件作为CSV文件保存到数据库可以访问的数据库服务器上的文件夹,则可以读取数据directly with external tables

您可以使用PL/SQL library将文件读取为Excel(xls或xlsx格式)。

我可能还有其他一些方法可以想到。这是一个非常common question