oracle - 如何在oracle中获取批量数据?

标签 oracle plsql oracle11g

有一个名为 PROFIT 的表,其中包含一家公司的所有利润数据。该表包含超过500万条数据,表结构如下

COMPANYID   YEAR    PROFIT
   100001   2017     50000
   100001   2016     30000
   100001   2015     20000
   100002   2017     80000
   100002   2016     70000
   100002   2015     40000
   100003   2016    100000
   100003   2015     75000
   100004   2017     50000
   100004   2016     40000
   100004   2015     30000
   100004   2014     10000
   100004   2013      5000

我有一个包含 75000 个 companyid 的 Excel 列表,我需要获取所有这些公司的数据。我不能使用 IN,因为它一次只允许列表中有 999 个值。

请帮帮我。如何使用单个查询获取所有这些记录?目前我使用的是 Oracle 11g。

最佳答案

假设...

  • 你只想运行一条SQL语句
  • 电子表格只是一个 ID 列表

...你可以准备这样的脚本。

  1. 将 Excel 电子表格保存为 .csv
  2. 在支持正则表达式的文本编辑器中打开.csv文件
  3. 使用正则表达式模式将每个数字转换为一个选择语句:select\1 as co_id from dual union all
  4. 顶部和尾部输出以创建一个 with 子查询
  5. 将其加入您的 PROFIT 表

所以现在你有这样的东西:

with cte as (
    select 1 as co_id from dual union all
    select 2 as co_id from dual union all
    ....
    select 75000 as co_id from dual 
) 
select p.companyid
       , p.year
       , sum(p.profit) as annual_profit -- or whatever
from cte
     join profit p
       on cte.co_id = p.companyid
group by p.companyid
         , p.year

这不是动态解决方案,但静态脚本应该适合一次性练习。如果这是一份定期报告,您应该协商在生产中进行更改的权利,以便您可以支持更好的方法。

关于oracle - 如何在oracle中获取批量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50127032/

相关文章:

plsql - 如何在oracle中获取文件大小或对象大小

sql - 在实体中使用没有主键的 View

Oracle %TYPE : when one var, 两个表,如何定义?

sql - oracle如何将日期保存为24小时格式

xml - 甲骨文 PL/SQL : Loop through XMLTYPE nodes

Oracle XE 11g (windows 8) 我无法连接到数据库(空闲实例)

oracle - Oracle 中合理的年份数据类型是什么?

oracle - 在查询中查找绑定(bind)变量的安全方法是什么

oracle - 使用 Oracle PL/SQL 将文件写入 SFTP

sql - 我可以在 Oracle 中使用 UTILS 吗?