15

我是 Oracle 新手,我不知道在 Oracle SQL(不是 PL/SQL)中使用 for 循环。

我需要在查询中将数字增加 +1 并执行语句;是否可以在 SQL 中使用 for 循环?

4

2 回答 2

35

你很困惑我的朋友。SQL 中没有循环,只有 PL/SQL 中。下面是一些基于现有 Oracle 表的示例 - 复制/粘贴以查看结果:

-- Numeric FOR loop --
set serveroutput on -->> do not use in TOAD --
DECLARE
  k NUMBER:= 0;
BEGIN
  FOR i IN 1..10 LOOP
    k:= k+1;
    dbms_output.put_line(i||' '||k);
 END LOOP;
END;
/

-- Cursor FOR loop --
set serveroutput on
DECLARE
   CURSOR c1 IS SELECT * FROM scott.emp;
   i NUMBER:= 0;
BEGIN
  FOR e_rec IN c1 LOOP
  i:= i+1;
    dbms_output.put_line(i||chr(9)||e_rec.empno||chr(9)||e_rec.ename);
  END LOOP;
END;
/

-- SQL example to generate 10 rows --
SELECT 1 + LEVEL-1 idx
  FROM dual
CONNECT BY LEVEL <= 10
/
于 2013-02-21T21:29:12.710 回答
3

您当然可以使用WITH 子句或使用Oracle SQL 中可用的分析函数来做到这一点。

通过一些努力,您将能够像在普通过程语言中一样从周期中得到任何东西。与普通 SQL 相比,这两种方法都非常强大。

http://www.dba-oracle.com/t_with_clause.htm

http://www.orafaq.com/node/55

不过,这需要一些努力。不要害怕发布一个具体的例子。

使用简单的伪表 DUAL 也有帮助。

于 2013-02-21T21:35:50.973 回答