Это мой код Проблема заключается в том, что он не добавляет hourswk вместе, чтобы правильно делать вывод для сотрудников без оклада тем, у кого есть H. Часы columnn в allinfo1 должны быть 45, 61 , 40, 43, 40, 44, 45, 40, но он отображает только один из часов и не добавляет их.PL/SQL, головной скребок
SET SERVEROUTPUT ON
DECLARE
v_idno paydata4.idno%TYPE;
v_name paydata4.name%TYPE;
v_sal paydata4.salary%TYPE;
v_job paydata4.jobcode%TYPE;
v_pay paydata4.payhr%TYPE;
v_idno1 paytran1.idno%TYPE;
v_hourswk paytran1.hourswk%TYPE;
v_hours allinfo1.hours%TYPE;
CURSOR paydata4_cursor IS
SELECT idno, name, salary, jobcode, payhr FROM paydata4
ORDER BY idno;
CURSOR paytran1_cursor IS
SELECT idno, hourswk FROM paytran1
WHERE v_idno = idno
order by idno;
BEGIN
OPEN paydata4_cursor;
LOOP
FETCH paydata4_cursor INTO v_idno, v_name, v_sal, v_job, v_pay;
EXIT WHEN paydata4_cursor%NOTFOUND;
IF paytran1_cursor%ISOPEN THEN
CLOSE paytran1_cursor;
END IF;
IF v_job = 'S'THEN
v_sal := v_sal/52;
End if;
IF v_job = 'H'THEN
v_sal := v_hours * v_pay;
END IF;
OPEN paytran1_cursor;
v_hours := 0;
loop
FETCH paytran1_cursor INTO v_idno1, v_hourswk;
EXIT WHEN paytran1_cursor%NOTFOUND;
v_hours := v_hours + v_hourswk;
dbms_output.put_line('The current amount is: '||v_hours);
END LOOP;
INSERT into allinfo1
VALUES(v_idno, v_name, v_hours, v_job, v_sal, v_hourswk);
CLOSE paytran1_cursor;
END LOOP;
CLOSE paydata4_cursor;
END;
/
SET SERVEROUTPUT OFF
Это мои таблицы
SQL> select *
2 from paydata1;
IDNO NAME J SALARY PAYHR
---- ------------------------- - ---------- ----------
1111 Ann French S 75000 0
2222 Robert Costa H 0 45
3333 Linda Ames H 0 50
4444 Scott Brooks S 78000 0
5555 Susan Ash S 57000 0
6666 James Smith S 55000 0
7777 Mary Jones H 0 36
8888 John Morse H 0 39
8 rows selected.
SQL> select *
2 from paytran1;
IDNO PRO HOURSWK
---- --- ----------
1111 123 20
1111 456 10
1111 789 15
2222 123 17
2222 456 24
2222 789 20
3333 123 20
3333 789 20
4444 123 10
4444 456 28
4444 789 5
5555 456 40
6666 456 44
7777 456 30
7777 789 15
8888 123 10
8888 456 25
8888 789 5
Это мой выход
SQL> select *
2 from allinfo1;
IDNO NAME HOURS JO PAY OTPAY
---- --------------- ---------- -- ---------- ----------
1111 Ann French 45 S 1442 15
2222 Robert Costa 61 H 2025 20
3333 Linda Ames 40 H 3050 20
4444 Scott Brooks 43 S 1500 5
5555 Susan Ash 40 S 1096 40
6666 James Smith 44 S 1058 44
7777 Mary Jones 45 H 1584 15
8888 John Morse 40 H 1755 5
8 rows selected.
Ожидаемый результат должен быть
SQL> выберите * 2 из allinfo1;
IDNO NAME HOURS JO PAY OTPAY
---- --------------- ---------- -- ---------- ----------
1111 Ann French 45 S 1442
2222 Robert Costa 61 H 2745
3333 Linda Ames 40 H 2000
4444 Scott Brooks 43 S 1500
5555 Susan Ash 40 S 1096
6666 James Smith 44 S 1058
7777 Mary Jones 45 H 1620
8888 John Morse 40 H 1560
это, вероятно, лучше, чтобы добавить, что ожидаемый результат должен быть. – Nat
добавил ожидаемый –
для столбца HOURS, вы ссылаетесь на колонку v_hours справа? – Nat