Plsql PL/SQL开关if语句

Plsql PL/SQL开关if语句,plsql,Plsql,如何将这个嵌套IF语句更改为复合IF语句,我知道它几乎相同,但我不知道如何用代码实现它 SET VERIFY OFF DECLARE v_idno donornew.idno%TYPE :=&input_idno; v_yrgoal donornew.yrgoal%TYPE; v_newgoal donornew.yrgoal%TYPE; v_state donornew.state%TYPE; v_city donornew.city%TYPE;

如何将这个嵌套IF语句更改为复合IF语句,我知道它几乎相同,但我不知道如何用代码实现它

SET VERIFY OFF
DECLARE
   v_idno    donornew.idno%TYPE :=&input_idno;
   v_yrgoal  donornew.yrgoal%TYPE;
   v_newgoal donornew.yrgoal%TYPE;
   v_state donornew.state%TYPE;
   v_city donornew.city%TYPE;
BEGIN
   SELECT yrgoal, state, city INTO v_yrgoal, v_state, v_city
FROM donornew
WHERE idno = v_idno;
IF v_state = 'MA' AND ( v_yrgoal < 400 or v_city = 'Fall River') THEN
         v_newgoal := v_yrgoal * 2.5;
       ELSE
        v_newgoal := v_yrgoal * 1.3;
END IF;
UPDATE donornew
SET yrgoal = v_newgoal
WHERE idno = v_idno;
COMMIT;
END;
/

设置VERIFY ON

我看不到任何嵌套的IF语句。代码中只有一条IF语句。你说的化合物是什么意思?
    Hello bascically for thsi purpose i will suggest you to go with purely SQL logic rather than PLSQL approach. Merge is the perfect example to resolve your issues.

    -- Approach is to use SQL approach rather then using PLSQL approach.

    MERGE INTO donornew D USING
    (SELECT yrgoal,
      state,
      city,
      idno,
      CASE
        WHEN state  = 'MA'
        AND (yrgoal < 400
        OR city     = 'Fall River')
        THEN yrgoal * 2.5
        ELSE yrgoal * 1.3
      END newgoal
    FROM donornew
    WHERE idno    = v_idno -- Input IDNO
    )A ON (d.idno = a.idno )
    WHEN MATCHED THEN
      UPDATE SET yrgoal = a.newgoal;

Let me know if this helps.