PL / SQL需要这方面的帮助

时间:2015-11-13 04:52:55

标签: plsql

问题是:首先创建一个名为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条记录。

1 个答案:

答案 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;