如何在Oracle中使用循环重复执行Select语句?

8

我看了很多关于在循环中重复使用Select语句的东西,但是我仍然有些困难,因为我到目前为止还没有找到清楚的解释。我想要执行一些查询(Select查询)多次,就像在FOR循环中一样。请问有人可以给出一些示例吗?


1
请展示一下你想要做的事情的例子。这太模糊了。 - OldProgrammer
8
在涉及关系数据库时,停止使用“循环”思维方式。改为考虑集合。大多数情况下,那些询问“如何在SQL中进行循环”的人实际上是在寻找联接。因此,您应该向我们展示一些样本数据以及期望的输出结果。 - user330315
是的,我明白了。就像我说的,我在这方面遇到了困难。这就是为什么我要求一个能够正常运行的小例子,因为我无法正确地运行我找到的示例,就像下面回答的那个一样。 - Noah Martin
1
如果您展示一些样本数据以及您想要的输出,而不是坚持编写循环,那将会更好。我相信我们可以想出比循环更好的解决方案。 - user330315
谢谢,我想选择一个有日期列的表格行。我想在每次迭代中将日期设置为当前日期后一周,直到日期列大于今天为止。除了循环,我想不到其他办法。你有别的想法吗? - Noah Martin
1个回答

15
您所要求的基本结构如下所示。请提供更多信息以获取更具体的代码示例。
DECLARE
  l_output NUMBER;
BEGIN
  FOR i IN 1..10 LOOP
    SELECT 1
    INTO l_output
    FROM dual;
    DBMS_OUTPUT.PUT_LINE('Result: ' || l_output);
  END LOOP;
END;

PS:如果您需要在SQL*Plus中启用输出功能,则可能需要运行以下命令:
SET SERVEROUTPUT ON

更新

要将结果插入到另一个表中:

DECLARE
-- Store the SELECT query in a cursor
  CURSOR l_cur IS SELECT SYSDATE DT FROM DUAL;  
--Create a variable that will hold each result from the cursor
  l_cur_rec l_cur%ROWTYPE;
BEGIN
  -- Open the Cursor so that we may retrieve results
  OPEN l_cur;  
  LOOP
    -- Get a result from the SELECT query and store it in the variable
    FETCH l_cur INTO l_cur_rec;
    -- EXIT the loop if there are no more results
    EXIT WHEN l_cur%NOTFOUND;
    -- INSERT INTO another table that has the same structure as your results
    INSERT INTO a_table VALUES l_cur_rec;        
  END LOOP;
  -- Close the cursor to release the memory
  CLOSE l_cur;
END;

要创建结果的视图,请参见以下示例:

CREATE VIEW scott.my_view AS 
  SELECT * FROM scott.emp;

使用视图查看您的结果:

SELECT * FROM scott.my_view;

感谢你的回答。这基本上是我想要实现的,但我在其他网站上也找到了这段代码,但它并不起作用。你能给我一个有效的示例吗? - Noah Martin
2
抱歉,看到我的更新回复了吗?这是你需要的吗? - Yiannis Nennes
是的,再次感谢,这个可行。最后一个问题,希望我没有打扰到您。我想通过select语句获取结构体的输出,或者更好的是我想在数据库中创建一个视图,该视图将用过程的结果填充。你能帮忙吗? - Noah Martin
2
我在我的回复中添加了一些代码,这解决了你的问题吗? - Yiannis Nennes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接