2017-03-12 81 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;