PL/SQL 输出列结果在 dbms_output.put_line 循环中

PL/SQL Output column results in dbms_output.put_line LOOP

早上好, 我会开始说我已经完成了 97%,因为是的,这是家庭作业。我唯一感到困惑的部分是不理解给出的错误。我必须创建一个循环,该循环将给定 2 个数字,然后输出这两个数字通常可被整除的数字。这是代码:

    SET SERVEROUTPUT ON SIZE UNLIMITED

--DROP TABLE IF IT EXISTS
DROP TABLE TESTER1 cascade constraints;
--CREATE TESTER1 TABLE
CREATE TABLE TESTER1 (xnum number, num1 number, num2 number);
--DECLARE VARIABLES
DECLARE 
   Test_Number1 number := 10;
   Test_Number2 number := 20;
   x number := 1;
--BEGIN   
BEGIN --OUTSIDE LOOP
    LOOP
        BEGIN --INSIDE LOOP
            INSERT INTO TESTER1(xnum,num1,num2)
            VALUES(x,MOD(Test_Number1,x),MOD(Test_Number2,x));
            x := x + 1;
        EXIT WHEN NOT x < 20;
        EXCEPTION
        WHEN OTHERS THEN
            dbms_output.put_line('error');
        END;
    END LOOP; --INSIDE LOOP
END; --OUTSIDE LOOP
/

然后我写了一个 SELECT 语句来找到两者有公约数的地方:

SELECT xnum FROM tester1
where num1=num2;

我的问题是:如何循环遍历 table Tester1 的结果并使用 dbms_output.put_line() 以便插入 SELECT 语句的每个结果,直到循环遍历3排? 我希望我解释得足够好。我正在使用 Oracle 12c。

好的,我找到的答案是:

BEGIN
    FOR r_xnum IN (SELECT xnum FROM tester1
where num1=num2)
    LOOP
    dbms_output.put_line('Common factor: ' ||r_xnum.xnum);
    END LOOP;
END;
/

再次感谢所有为我指明正确方向的人。自从我上次在这里发布以来已经有一段时间了,所以不确定如何在不完全删除它的情况下结束这个问题,所以我会保持它的原样,除非其他人知道如何。 编辑我必须等待 2 天才能接受我自己的答案

决赛 运行:

SET SERVEROUTPUT ON SIZE UNLIMITED

--DROP TABLE IF IT EXISTS
DROP TABLE TESTER1 cascade constraints;
--CREATE TESTER1 TABLE
CREATE TABLE TESTER1 (xnum number, num1 number, num2 number);

--DECLARE VARIABLES
DECLARE 
   Test_Number1 number := '&input1';
   Test_Number2 number := '&input2';
   x number := 1;
--BEGIN   
BEGIN --LOOP 1
    LOOP --LOOP FOR INSERT
        BEGIN --INSIDE LOOP
            INSERT INTO TESTER1(xnum,num1,num2)
            VALUES(x,MOD(Test_Number1,x),MOD(Test_Number2,x));
            x := x + 1;
            EXIT WHEN NOT x < 20;
       END;
    END LOOP; --LOOP 1
        BEGIN --LOOP FOR SELECT
            dbms_output.put_line('The two numbers enetered are ' ||Test_Number1|| 'and '||Test_Number2);
            FOR r_xnum IN (SELECT xnum FROM tester1
                where num1=num2)
            LOOP
                dbms_output.put_line('Common factor: ' ||r_xnum.xnum);
            END LOOP;
        END;
END;
/