Ваша проблема в предложении INTO
- оно объявляется только один раз в выражении:
SELECT ph.wage_rate,
ph.hrs_worked
INTO t_wage, t_hours
FROM PAY_HISTORY ph
WHERE ph.wage_rate = p_wage_rate
AND ph.hrs_worked = p_hrs_worked;
Заполнение переменных основано на порядке столбцов, объявленных в предложении SELECT.
Полная перезапись:
Если вы вычтете 40 из hours_worked
со значением также 40, вы просто умножите на ноль.И вы хотите добавить выплату времени сверхурочно ...
CREATE OR REPLACE FUNCTION gr_pay_hrly (p_wage_rate IN NUMBER,
p_hrs_worked IN NUMBER)
RETURN NUMBER IS
t_gross_pay NUMBER(10,2);
BEGIN
SELECT CASE
WHEN ph.hrs_worked > 40 THEN ((ph.hrs_worked - (ph.hrs_worked - 40)) * ph.wage_rate) + (ph.hrs_worked - 40) * ph.wage_rate * 1.5
WHEN ph.hrs_worked <= 40 THEN ph.hrs_worked * ph.wage_rate
ELSE 0
END
INTO t_gross_pay
FROM PAY_HISTORY ph
WHERE ph.wage_rate = p_wage_rate
AND ph.hrs_worked = p_hrs_worked;
RETURN t_gross_pay;
END;