我必须创建一个while循环,它以1+1=2..1+4=5..all的方式进行4+4=8,我得到了第一部分,但我坚持下一步该做什么。
DECLARE
v_recno testloop1.rec_no%TYPE :=1;
v_ctr testloop1.ctr%TYPE :=1;
v_datain testloop1.data_in%TYPE :=2;
BEGIN
WHILE v_recno = 1 AND v_ctr < 5 LOOP
INSERT INTO testloop1(rec_no, ctr, data_in)
VALUES(v_recno, v_ctr, v_datain);
v_recno :=v_recno;
v_ctr :=v_ctr + 1;
v_datain :=v_recno + v_ctr;
END LOOP;
END;
/
SQL> @ loop
PL/SQL procedure successfully completed.
SQL> select *
2 from testloop1;
REC_NO CTR DATA_IN
---------- ---------- ----------
1 1 2
1 2 3
1 3 4
1 4 5
发布于 2015-11-12 03:09:14
如果我理解你想要达到的目标,你只需要将你的循环封装在一个外部循环中。因此,一个循环将从一个v_recno (外循环)迭代,另一个循环将迭代通过v_ctr (内循环)。类似的东西(未经测试):
DECLARE
v_recno testloop1.rec_no%TYPE :=1;
v_ctr testloop1.ctr%TYPE :=1;
v_datain testloop1.data_in%TYPE :=1; --change from 2 to 1
BEGIN
WHILE v_recno < 5 LOOP
WHILE v_ctr < 5 LOOP
v_datain :=v_recno + v_ctr; --Moved up before insert statement
INSERT INTO testloop1(rec_no, ctr, data_in)
VALUES(v_recno, v_ctr, v_datain);
v_ctr :=v_ctr + 1;
END LOOP;
v_recno := v_recno + 1;
v_ctr := 1; --Added this to reset
END LOOP;
END;
/
使用基本循环:
DECLARE
v_recno testloop1.rec_no%TYPE :=1;
v_ctr testloop1.ctr%TYPE :=1;
v_datain testloop1.data_in%TYPE :=1;
BEGIN
LOOP
LOOP
v_datain :=v_recno + v_ctr;
INSERT INTO testloop1(rec_no, ctr, data_in)
VALUES(v_recno, v_ctr, v_datain);
v_ctr :=v_ctr + 1;
IF v_ctr > 4 THEN
exit;
END IF;
END LOOP;
v_recno := v_recno + 1;
v_ctr := 1;
IF v_recno > 4 THEN
exit;
END IF;
END LOOP;
END;
/
https://stackoverflow.com/questions/33663655
复制相似问题