创建一个用户自定义的函数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
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
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>
select sum_fun(10) from dual;
谢谢各位