先谢谢你先!这个代码是可以执行过去。但是这样子Select * from employee_history; 里面插入很多空值。。而我不想在代码最后加delete from employee_history where employee_id = null ! 请问有什么方法处理这个type值,先谢谢!
PROCEDURE partition_by_eligibility IS BEGIN FOR indx IN employee_ids.FIRST .. employee_ids.LAST LOOP IF comp_analysis_is_eligible(employee_ids(indx)) THEN approved_employee_ids(indx) := employee_ids(indx); ELSE denied_employee_ids(indx) := employee_ids(indx); denied_salaries(indx) := salaries(indx); denied_hire_dates(indx) := hire_dates(indx); END IF; END LOOP; END; 这个地方改成
PROCEDURE partition_by_eligibility IS approved_idx INTEGER:=1; denied_idx INTEGER:=1; BEGIN FOR indx IN employee_ids.FIRST .. employee_ids.LAST LOOP IF comp_analysis_is_eligible(employee_ids(indx)) THEN approved_employee_ids(approved_idx) := employee_ids(indx); approved_idx:=approved_idx+1; ELSE denied_employee_ids(denied_idx) := employee_ids(indx); denied_salaries(denied_idx) := salaries(indx); denied_hire_dates(denied_idx) := hire_dates(indx); denied_idx:=denied_idx+1; END IF; END LOOP; END; 这样就行了
--1774是部门编码,2500是调薪后的工资
give_raises_in_department(1774,2500);
end;
你用if else来判断
导致approved和denied数组各有部分元素没有值。然后下面再用没有值的这些元素,就会报错IF comp_analysis_is_eligible(employee_ids(indx))
THEN
approved_employee_ids(indx) := employee_ids(indx);
ELSE
denied_employee_ids(indx) := employee_ids(indx);
denied_salaries(indx) := salaries(indx);
denied_hire_dates(indx) := hire_dates(indx);
END IF;
改成
IF comp_analysis_is_eligible(employee_ids(indx))
THEN
approved_employee_ids(indx) := employee_ids(indx);
denied_employee_ids(indx) := NULL;
denied_salaries(indx) := NULL;
denied_hire_dates(indx) := NULL;
ELSE
approved_employee_ids(indx) := NULL;
denied_employee_ids(indx) := employee_ids(indx);
denied_salaries(indx) := salaries(indx);
denied_hire_dates(indx) := hire_dates(indx);
END IF;这样应该就不会报错了。至于业务问题要你自己来判断
先谢谢你先!这个代码是可以执行过去。但是这样子Select * from employee_history; 里面插入很多空值。。而我不想在代码最后加delete from employee_history where employee_id = null ! 请问有什么方法处理这个type值,先谢谢!
IS
BEGIN
FOR indx IN employee_ids.FIRST .. employee_ids.LAST
LOOP
IF comp_analysis_is_eligible(employee_ids(indx))
THEN
approved_employee_ids(indx) := employee_ids(indx);
ELSE
denied_employee_ids(indx) := employee_ids(indx);
denied_salaries(indx) := salaries(indx);
denied_hire_dates(indx) := hire_dates(indx);
END IF;
END LOOP;
END;
这个地方改成
PROCEDURE partition_by_eligibility
IS
approved_idx INTEGER:=1;
denied_idx INTEGER:=1;
BEGIN
FOR indx IN employee_ids.FIRST .. employee_ids.LAST
LOOP
IF comp_analysis_is_eligible(employee_ids(indx))
THEN
approved_employee_ids(approved_idx) := employee_ids(indx);
approved_idx:=approved_idx+1;
ELSE
denied_employee_ids(denied_idx) := employee_ids(indx);
denied_salaries(denied_idx) := salaries(indx);
denied_hire_dates(denied_idx) := hire_dates(indx);
denied_idx:=denied_idx+1;
END IF;
END LOOP;
END;
这样就行了