【问题标题】:Can I loop over the results of an SQL query to use each value in another query all at once in SQL Developer?我可以遍历 SQL 查询的结果以在 SQL Developer 中一次使用另一个查询中的每个值吗?
【发布时间】:2016-04-29 19:53:05
【问题描述】:

我想要实现的(如果可以通过 SQL Developer 实现的话)是,当我执行脚本时,它会执行以下操作:

  1. 运行SELECT 语句将返回ID 列表。 大约 270 条记录。
  2. 我需要在另一个SELECT 语句(在WHERE 子句中)中单独使用每个ID,这将返回一些记录。 其中一些可能会产生超过 17,000 条记录,而有些可能只有一条。
  3. 然后第二个SELECT 的每个结果我希望将其导出为 excel 或 csv 文件到我电脑上的文件夹中。

我已经准备好“选择”,但我不知道如何循环第一个的结果以获取每个 ID 并在第二个中使用它。另外我不知道如何从代码中自动导出。

【问题讨论】:

    标签: plsql oracle-sqldeveloper


    【解决方案1】:

    您可以使用 GROUP BY 子句。 在这里阅读更多:

    http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqlj32654.html

    【讨论】:

    • 感谢 Al Pimenov,这很有帮助。关于导出部分有什么建议吗?
    【解决方案2】:

    如果第一个 SELECT 只返回 ID,而这就是第二个 SELECT 所需的全部内容,只需使用 IN 子句为第二个提供第一个 SELECT 查询。 示例:

    -- Your second select
    SELECT
      col1
      ,col2
      ,col3
      ,col4
    FROM
      second_table
    WHERE
      some_foreign_id IN (
        -- Your first select
        SELECT
          id
        FROM
          first_table
        WHERE
          some_conditions...
      )
    

    【讨论】:

      【解决方案3】:

      在我看来,不要为此使用 PLSQL。在 PLSQL 中,您可以通过使用 REFCURSOR 获得输出的唯一方法(除非您不使用 UTIL File 包来执行此操作)。一个简单的 SELECT WITH JOIN 条件就可以满足您的要求。

      Test illustration
      
      SELECT A.* FROM TABLE_A A, TABLE_B
      WHERE A.COMMON_COLUMN = B.COMMON_COLUMN;
      

      希望这对您有同样的帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-06
        • 1970-01-01
        相关资源
        最近更新 更多