2013-02-21 10 views
11

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

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

+0

セット操作に「forループ」はありません。 「本当の質問」(入力/出力/現在の試行を必ず表示してください)を尋ね、タイトルにそれが反映されていることを確認してください。 PL/SQL *でない場合は 'plsql'タグを削除してください。 –

+0

pstによると、 "forループ"はありませんが、同じ効果を達成する方法があります。あなたは*ステートメント*を実行することによって何を意味するのですか?また、どの番号を1ずつ増やす必要がありますか? –

+0

@ A.B.Cade 'i'と言うカスタム変数を作成したいのですが、 '5'に達するまでそれを増やしたいのですが、この変数を使用して文字列に追加したいのですが。 SQLで – user964147

答えて

25

私の友人はかなり混乱しています。 LOOPSは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 
/
3

あなたは確か句 WITH を使用していることを行うことができる、または分析関数のOracle SQLで利用できるを使用します。

通常の手続き型言語のように、サイクル的に何かを得ることができます。どちらの方法も通常のSQLに比べてかなり強力です。

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

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

これは、しかし、いくつかの努力が必要です。具体的な例を投稿することを恐れないでください。

単純な擬似表を使用すると、DUALも役立ちます。

+0

私の質問を編集しました – user964147

+1

の例を見てください。申し訳ありませんが、それを見ることはできません。 「賢明な」人たちは、おそらく彼らがそれを理解しなかったので、おそらく、早すぎて質問を閉じた。 – MarianP

+0

別の質問を投稿できますか? 「Oracle SQL分析関数を使用してこれを行う方法」としてフレーム化しますか?彼らはそれを閉じないだろう。 – MarianP