大家帮忙看看,为什么这样创建包体,会出错package body "sara.SALPKG" has errors?调用包体里的函数时,提示PL/SQL: could not find program unit
-------------------------------------------------------------------
create or replace package salpkg as
type salset is table of emp.sal%type;
function emp_avgsal(salary in salset)return emp.sal%type;
end salpkg;
/create or replace package body salpkg as
function emp_avgsal(salary in salset)return emp.sal%type is
begin
  avgsal emp.sal%type :=0;
  for i in salary.first..salary.last
  loop
  avgsal :=avgsal + salary(i);
  end loop;
  avgsal :=avgsal / salary.count;
  return avgsal;
end;
end;
/set serveroutput on
declare
  cursor sal_cur is select sal from emp;
  empsal salpkg.salset;
begin
  open sal_cur;
  fetch sal_cur
  bulk collect into empsal;
  dbms_output.put_line(salpkg.emp_avgsal(salary => empsal));
  close sal_cur;
end;
/

解决方案 »

  1.   

    show errors
    看看具体的错误信息
      

  2.   

    create or replace package salpkg is
    type salset is table of emp.sal%type;
    function emp_avgsal(salary in salset)return emp.sal%type;
    end salpkg;                                                                          
    create or replace package body salpkg is
    function emp_avgsal(salary in salset)return emp.sal%type is avgsal emp.sal%type;
    begin
      avgsal :=0;
      for i in salary.first..salary.last
      loop
      avgsal :=avgsal + salary(i);
      end loop;
      avgsal :=avgsal / salary.count;
      return avgsal;
    end;
    end salpkg;set serveroutput on
    SQL> declare
      2    cursor sal_cur is select sal from emp;
      3    empsal salpkg.salset;
      4  begin
      5    open sal_cur;
      6    fetch sal_cur
      7    bulk collect into empsal;
      8    dbms_output.put_line(salpkg.emp_avgsal(salary => empsal));
      9    close sal_cur;
     10  end;
     11  /
     
    2500
     
    PL/SQL procedure successfully completed
    你的函数的return语句有问题 return + 返回类型 + is +变量名 + 返回类型 
      

  3.   

    谢谢两位帮忙~~,问题确实出在函数的return语句上,终于解决了^_^我刚开始学plsql,第一次在这里提问,就那么快有回复,太感谢了