所以excel占用了很多行。我有10,000行左右的数据占用,我正在使用10,000或不同的ID。有没有办法通过将整个ID列作为一个组捕获整个ID列并在WHERE查询中包含该组而不是循环10,000个资产并查询数据库10,000次来查询oracle数据库一次?
很抱歉没有提供代码。我真的没有尝试过这个,因为我不知道是否存在解决方案。
答案 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。