2017-03-12 146 views
0

我需要使用另一個表中的隨機值創建表。爲此,我嘗試使用從其他表中收集隨機FIRST_NAMELAST_NAMELOOP,並將它們放在我的表中。使Oracle SQL Developer每次都在循環中執行SELECT語句

但是使用LOOP不起作用,因爲SELECT語句不會執行多次。

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_fnameLine_no c選擇數據是打印在打印其它變量v_fname2。我不明白,你沒有改變價值的變量,爲什麼你期望看到印刷結果發生變化?你看,v_fnamev_fname2是兩個不同的變量。您正在將值分配給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;