2015-11-13 4 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 и выплюнуть его t o эти 4 записи в новой таблице.

+0

Посмотрите на КУРСОРЫ: выберите свои данные в курсор, переместите курсор и вставьте результаты в новую таблицу. –

+0

@NorbertvanNobelen ответит ниже, возьмите его и сделайте четыре ежеквартальных платежа? –

ответ

0

hi использовать курсор, чтобы сделать это в цикле , и вы можете использовать возвращающий оператор для получения нового значения после обновления и вставки записей в таблицу журналов.

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

Это не работает –

Смежные вопросы