【问题标题】:Use for loop after the With Clause in PL/SQL在 PL/SQL 中的 With 子句之后使用 for 循环
【发布时间】:2016-09-27 19:37:25
【问题描述】:

我正在使用 PL/SQL。在 with 子句中定义我的临时表后,我试图立即创建一个 for 循环。但是,我得到一个错误,首先有一个 SELECT 查询。

例如

WITH TMP1 AS (.....), TMP2 AS (......), TMP3 AS (......)

FOR R IN (SELECT DISTINCT ..... FROM TMP1 WHERE .....)
LOOP
SELECT .... FROM TMP2, TMP2 WHERE TMP2.... = R..... ....

我该怎么做?

谢谢

【问题讨论】:

  • 您需要熟悉 SQL 和 PL/SQL 之间的区别 - 它们是两种不同的语言,尽管它们都可以嵌入到另一种中。

标签: sql oracle plsql with-statement


【解决方案1】:

您无法在整个语句之外访问 CTE。而且您不能在 CTE 的最终 SELECT 之外访问 CTE 的各个部分。

您需要将整个 CTE(包括最终的SELECT 语句)放入游标循环中:

FOR R IN (WITH TMP1 AS (.....), 
               TMP2 AS (......), 
               TMP3 AS (......)
          SELECT DISTINCT ..... 
          FROM TMP1 
             JOIN temp2 ON ... 
             JOIN temp3 ON ... 
          WHERE .....)
LOOP
   -- here goes the code that processes each row of the query
END LOOP;

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多