创建一个用户自定义的函数SUM_FUN,函数实现是通过输入部门号,返回该部门的员工总人数;
create or replace function sum_fun(v_id in number)
return number
is
v_sum number;
begin
select count(*) into v_sum from departments
where department_id=v_id;
return v_sum;
end;调用variable sum number;
exec :sum:=sum_fun(10);10号部门有一条记录。结果:
Error starting at line 1 in command:
exec :sum:=sum_fun(10)
Error report:
索引中丢失  IN 或 OUT 参数:: 1

解决方案 »

  1.   

    SQL> CREATE OR REPLACE FUNCTION sum_fun(v_id IN NUMBER) RETURN NUMBER IS
      2    v_sum NUMBER;
      3  BEGIN
      4    SELECT COUNT(*) INTO v_sum FROM departments WHERE department_id = v_id;
      5    RETURN v_sum;
      6  END;
      7  /
     
    Function created
     
    SQL> SELECT * FROM departments;
     
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPARTMENT_ID
    ----- ---------- --------- ----- ----------- --------- --------- -------------
     7369 SMITH      CLERK      7902 1980-12-17     800.00                      20
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00            30
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00            30
     7566 JONES      MANAGER    7839 1981-4-2      2975.00                      20
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00            30
     7698 BLAKE      MANAGER    7839 1981-5-1      2850.00                      30
     7782 CLARK      MANAGER    7839 1981-6-9      2450.00                      10
     7788 SCOTT      ANALYST    7566 1987-4-19     3000.00                      20
     7839 KING       PRESIDENT       1981-11-17    5000.00                      10
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00            30
     7876 ADAMS      CLERK      7788 1987-5-23     1100.00                      20
     7900 JAMES      CLERK      7698 1981-12-3      950.00                      30
     7902 FORD       ANALYST    7566 1981-12-3     3000.00                      20
     7934 MILLER     CLERK      7782 1982-1-23     1300.00                      10
     
    14 rows selected
     
    SQL> 
    SQL> variable sum number;
    SQL> exec :sum:=sum_fun(10);
     
    PL/SQL procedure successfully completed
    sum
    ---------
    3
     
    SQL> print sum
    sum
    ---------
    3
     
    SQL> 
      

  2.   

    哥们:我把你的语句再PLSQL中运行了下,发现一点都没问题。跟1楼的运行效果一模一样
      

  3.   

    楼主这样测试一下你的function看看
    select sum_fun(10) from dual;
      

  4.   

    我用dbms调用成功了,
    谢谢各位