2017-03-12 5 views
0

別の表からランダムな値を持つ表を作成する必要があります。そのために、他のテーブルからランダムFIRST_NAMELAST_NAMEを集めてテーブルに入れて、LOOPを使ってみました。Oracle SQL Developerがループ内で毎回SELECT文を実行するようにする

しかし、SELECTステートメントは複数回実行されないため、LOOPを使用すると機能しません。

BEGIN 
LOOP 
v_counter:=v_counter+1; 
SELECT fname INTO v_fname FROM users SAMPLE (5) WHERE some_condition AND ROWNUM=1; 
SELECT lname INTO v_lname FROM users SAMPLE (5) WHERE some_condition AND ROWNUM=1; 
DBMS_OUTPUT.PUT_LINE(v_fname2); 
EXIT WHEN (v_counter > 50); 
END LOOP; 
END; 

同じ名前が50回印刷されます。

+0

あなたは* SELECT文が複数回実行しないで何を意味していますか*。?それは何回実行されるべきですか? – Ravi

+0

50回の異なる結果を返すために50回 –

+0

あなたのコードで何が間違っていますか?それは50回印刷されます..あなたのテーブルに異なるレコードが含まれている場合、あなたは異なる結果を期待することができます。 – Ravi

答えて

1

OPのコード:

BEGIN 
LOOP 
v_counter:=v_counter+1; 
SELECT fname INTO v_fname FROM users SAMPLE (5) WHERE some_condition AND ROWNUM=1; --Line_no a 
SELECT lname INTO v_lname FROM users SAMPLE (5) WHERE some_condition AND ROWNUM=1; --Line_no b 
DBMS_OUTPUT.PUT_LINE(v_fname2); --Line_no c 
EXIT WHEN (v_counter > 50); 
END LOOP; 
END; 

問題:私たちが表示された場合

Line_No a印刷が別の変数v_fname2を印刷してある変数v_fnameLine_no c内のデータを選択しています。私は理解していない、あなたが値を変更していない変数、なぜあなたは印刷物の結果が変わるのを期待していますか?あなたは、v_fnamev_fname2が異なる2つの変数であることがわかります。値v_fnameに値を割り当てて、v_fname2ではなく、v_fname2で、v_fnameではなく値を割り当てます。

0

むしろ暗黙のFOR LOOPを使用します。

BEGIN 
    FOR x in (
    SELECT a.fname, b.lname FROM users SAMPLE (5) a, users SAMPLE (5) b WHERE some_condition AND ROWNUM < 51 
) LOOP 
    DBMS_OUTPUT.PUT_LINE(x.fname||' - '||x.lname); 
    END LOOP; 
END; 
関連する問題