【问题标题】:Loop through list of values in Oracle query results循环遍历 Oracle 查询结果中的值列表
【发布时间】:2020-04-13 08:37:37
【问题描述】:

在 Oracle 中,是否可以遍历从查询返回的值并在嵌套查询中使用这些值?

例如:

For each A 
In Table1 
Where B = C 
(Select D 
From Table2 
Where D = A)
Loop
End;

【问题讨论】:

  • 是的。对游标进行一些研究。
  • 这需要使用光标。您应该可以通过在此处搜索找到示例。不过,根据您的具体目标,可能会有更好的方法来完成它。
  • @KenWhite 我正在尝试基于一个标准(其中 columnB = C)构建唯一值列表(A),然后执行两个嵌套查询以从各种表中提取第一行数据基于在第一个查询中提取的每个值 (A)。不确定这是否有意义。最终,我尝试使用循环而不是对每个唯一 (A) 值执行相同的查询。这将全部使用 ADODB 在 excel 中执行。

标签: sql oracle loops foreach nested


【解决方案1】:

只需使用 SQL:

SELECT D 
FROM   Table2 
WHERE  D IN ( SELECT A FROM Table1 WHERE B = C )

或者你可以使用集合:

CREATE TYPE int_list IS TABLE OF NUMBER(10,0);

然后:

DECLARE
  a_array int_list;
  d_array int_list;
BEGIN
  SELECT a
  BULK COLLECT INTO a_array
  FROM   table1
  WHERE  b = c;

  SELECT d
  BULK COLLECT INTO d_array
  FROM   Table2
  WHERE  d MEMBER OF a_array;

  FOR i IN 1 .. d_array.COUNT LOOP
    NULL;
  END LOOP;
END;
/

【讨论】:

    【解决方案2】:

    您可以通过 PL/SQL 使用 for 循环来实现您的目标。一般语法如下。将 NULL; 替换为您希望在内部 for 循环中使用的任何逻辑。

    BEGIN
      FOR r IN (
        SELECT a 
        FROM table1 
        WHERE b = c)
      LOOP
        FOR s IN (
          SELECT d
          FROM table2
          WHERE d = a)
        LOOP
          NULL;
        END LOOP;
      END LOOP;
    END;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多