解决方案 »

  1.   

    没说出来。在调用的时候begin
    --1774是部门编码,2500是调薪后的工资
    give_raises_in_department(1774,2500);
    end;
      

  2.   

    partition_by_eligibility这里
    你用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;这样应该就不会报错了。至于业务问题要你自己来判断
      

  3.   


    先谢谢你先!这个代码是可以执行过去。但是这样子Select * from employee_history; 里面插入很多空值。。而我不想在代码最后加delete from employee_history where employee_id = null   ! 请问有什么方法处理这个type值,先谢谢!
      

  4.   

    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;
    这样就行了