我需要创建一个包含来自另一个表的随机值的表。为此,我尝试使用LOOP
从其他表中收集随机FIRST_NAME
和LAST_NAME
并将其放入我的表格中。
但是使用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 :(得分: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_fname
和Line_no c
中正在打印的数据正在打印另一个变量v_fname2
。我不明白,你没有改变价值的变量,为什么你期望看到印刷品的结果发生变化?您看,v_fname
和v_fname2
是两个不同的变量。在打印v_fname
而不是v_fname2
时,您将值分配给v_fname2
而不是v_fname
。
答案 1 :(得分: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;