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;
/
早上好, 我会开始说我已经完成了 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;
/