问题是:首先创建一个名为amttopay的表,它有三个字段:rec_no,idno和amt(使一个数字字段可以容纳3个小数位。你也将使用捐赠者表的副本进行这个分配接收与捐赠者表上的idno相匹配的数字。检查该记录的yrgoal。如果它大于500,则将其翻倍以创建新目标并在包含季度支付号码的amttopay表上写入4条记录(1通过4),idno,以及为实现新目标而支付的季度金额。如果不大于500,那么为目标增加50%以制定新目标并通过写入具有相同信息的四个记录来处理它
我创建了表amttopay,它是空白的:
SQL> create table amttopay
2 (rec_no number(3),
3 idno number(3),
4 amt number(8,3));
Table created.
我也有捐赠者表,以便您参考:
SQL> select *
2 from newloop;
IDNO NAME STADR CITY ST ZIP DATEFST YRGOAL
11111 Stephen Daniels 123 Elm St Seekonk MA 02345 03-JUL-98 500
12121 Jennifer Ames 24 Benefit St Providence RI 02045 24-MAY-97 400
22222 Carl Hersey 24 Benefit St Providence RI 02045 03-JAN-98
23456 Susan Ash 21 Main St Fall River MA 02720 04-MAR-92 100
33333 Nancy Taylor 26 Oak St Fall River MA 02720 04-MAR-92 50
34567 Robert Brooks 36 Pine St Fall River MA 02720 04-APR-98 50
我的代码是:
SET VERIFY OFF
DECLARE
v_idno donornew.idno%TYPE :=&input_idno;
v_yrgoal donornew.yrgoal%TYPE;
BEGIN
SELECT idno, yrgoal INTO v_idno, v_yrgoal
FROM newloop
WHERE idno = v_idno;
IF v_yrgoal > 500 THEN
v_newgoal := v_yrgoal * 2;
ELSE v_yrgoal < 500 THEN
v_newgoal := v_yrgoal * 1.5;
END IF;
UPDATE newloop
SET yrgoal = v_newgoal
WHERE idno = v_idno;
COMMIT;
END;
/
SET VERIFY ON
我不知道如何修复我的代码来运行它来选择一个idno,让yrgoal运行if循环并将其吐出到新表中的那4条记录。
答案 0 :(得分:0)
使用游标在循环中执行它 并且您可以使用返回运算符在更新后获取新值并将记录插入日志表中。
DECLARE
CURSOR NEWLOOP_CURS IS
SELECT IDNO, YRGOAL FROM NEWLOOP;
V_NEWGOAL NEWLOOP.YRGOAL%TYPE;
BEGIN
FOR INDX IN NEWLOOP_CURS
LOOP
IF INDX.YRGOAL > 500
THEN
V_NEWGOAL := INDX.YRGOAL * 2;
ELSE
INDX.YRGOAL < 500
THEN V_NEWGOAL := INDX.YRGOAL * 1.5;
END IF;
UPDATE NEWLOOP
SET YRGOAL = V_NEWGOAL
WHERE IDNO = INDX.IDNO;
COMMIT;
END LOOP;
END;