Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plsql PL/SQL在这方面需要帮助_Plsql - Fatal编程技术网

Plsql PL/SQL在这方面需要帮助

Plsql PL/SQL在这方面需要帮助,plsql,Plsql,问题是:首先创建一个名为amttopay的表,它有三个字段:rec_no、idno和amt(将金额设为一个数字字段,可保留小数点后3位。您还将为此分配使用捐赠者表的副本。输入一个与捐赠者表上的idno匹配的数字。检查该记录的yrgoal。如果它大于500,则将其加倍以创建一个新目标,并在包含qu的amttopay表上写入四条记录。)arterly支付编号(1到4)、idno和实现新目标的季度支付金额。如果不大于500,则向目标添加50%以制定新目标,并通过写入具有相同信息的四条记录来处理 我创建

问题是:首先创建一个名为amttopay的表,它有三个字段:rec_no、idno和amt(将金额设为一个数字字段,可保留小数点后3位。您还将为此分配使用捐赠者表的副本。输入一个与捐赠者表上的idno匹配的数字。检查该记录的yrgoal。如果它大于500,则将其加倍以创建一个新目标,并在包含qu的amttopay表上写入四条记录。)arterly支付编号(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

我的代码是:

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;