15

私は Oracle を初めて使用し、Oracle SQL (PL/SQL ではない) で for ループを使用することについて知りません。

クエリで数値を +1 増やしてステートメントを実行する必要がありました。SQL で for ループを使用することは可能ですか?

4

2 に答える 2

35

あなたはかなり混乱しています。SQL には LOOPS はなく、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 に答える