Plsql PL/SQL在这方面需要帮助
问题是:首先创建一个名为amttopay的表,它有三个字段:rec_no、idno和amt(将金额设为一个数字字段,可保留小数点后3位。您还将为此分配使用捐赠者表的副本。输入一个与捐赠者表上的idno匹配的数字。检查该记录的yrgoal。如果它大于500,则将其加倍以创建一个新目标,并在包含qu的amttopay表上写入四条记录。)arterly支付编号(1到4)、idno和实现新目标的季度支付金额。如果不大于500,则向目标添加50%以制定新目标,并通过写入具有相同信息的四条记录来处理 我创建了amttopay表,该表为空:Plsql PL/SQL在这方面需要帮助,plsql,Plsql,问题是:首先创建一个名为amttopay的表,它有三个字段:rec_no、idno和amt(将金额设为一个数字字段,可保留小数点后3位。您还将为此分配使用捐赠者表的副本。输入一个与捐赠者表上的idno匹配的数字。检查该记录的yrgoal。如果它大于500,则将其加倍以创建一个新目标,并在包含qu的amttopay表上写入四条记录。)arterly支付编号(1到4)、idno和实现新目标的季度支付金额。如果不大于500,则向目标添加50%以制定新目标,并通过写入具有相同信息的四条记录来处理 我创建
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
我的代码是:
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
设置验证关闭
声明
v_idno donornew.idno%类型:=&input_idno;
v_yrgoal donornew.yrgoal%类型;
开始
选择idno,YRGAIL进入v_idno,v_YRGAIL
来自newloop
式中,idno=v_idno;
如果v_yrgoal>500,则
v_newgoal:=v_yrgoal*2;
否则v_yrgoal<500那么
v_newgoal:=v_yrgoal*1.5;
如果结束;
更新newloop
设置yrgoal=v_newgoal
式中,idno=v_idno;
犯罪
结束;
/
设置验证
我不知道如何修复我的代码来运行它来选择一个idno,获取目标运行if循环并将其吐出到新表中的那4条记录。hi使用游标在循环中执行它 您可以使用returning操作符在更新后获取一个新值,并在日志表中插入记录
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;
声明
游标NEWLOOP\u CURS为
从NEWLOOP中选择IDNO、YRGOAL;
V_NEWGOAL NEWLOOP.YRGOAL%类型;
开始
对于NEWLOOP\u CURS中的INDX
环
如果INDX.YRGOAL>500
然后
V_NEWGOAL:=INDX.YRGOAL*2;
其他的
INDX.YRGOAL<500
然后V_NEWGOAL:=INDX.YRGOAL*1.5;
如果结束;
更新NEWLOOP
设置YRGOAL=V_NEWGOAL
式中,IDNO=INDX.IDNO;
犯罪
端环;
结束;
查看游标:将数据选择到游标中,在游标上循环并将结果插入到新表中。@NorbertvanNobelen下面的答案会接受它并按季度付款吗?这会在新的循环表中创建四条记录吗?
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;