2015-11-13 55 views
-1

問題是:首先創建一個名爲amttopay的表,它有三個字段:rec_no,idno和amt(使金額成爲一個可以保存3位小數的數字字段,您也將使用副本在這個賦值表中輸入一個與idno相匹配的數字,檢查該記錄的yrgoal,如果它大於500,則將其加倍以創建一個新目標並在amttopay表上寫入四條記錄其中包含季度付款編號(1至4),idno以及爲實現新目標而需要支付的季度金額,如果不超過500,則將目標值加50%作爲新目標並通過撰寫這四條記錄的信息相同。PL/SQL在這方面需要幫助

我創建了表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循環並吐出它o新表中的4條記錄。

+0

調查CURSORS:將數據選擇到遊標中,循環遊標並將結果插入到新表中。 –

+0

@NorbertvanNobelen會在下面回答這個問題並作出四次季度付款嗎? –

回答

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; 
+0

是否會在新的循環表中創建四條記錄? –

+0

這不起作用 –