首先是常用的查询
查看当前用户创建的所有函数,存储过程,触发器
select distinct name,type from all_source where owner='HR';
函数
函数是有名称的pl/sql块
函数有返回值
在表达式中调用函数
存储在服务器端
实例一
创建函数,根据id获得emp中的相应工资
1.创建函数
create or replace function fun_getsal
(v_id IN emp.employee_id%type)
return number
is
v_salary emp.salary%TYPE:=0;
begin
select salary into v_salary from emp where employee_id=v_id;
return(v_salary);
end fun_getsal;
2.调用
hr@ORCL> var out_emp_salary number;
hr@ORCL> exec:out_emp_salary:=fun_getsal(108);
PL/SQL 过程已成功完成。
hr@ORCL> print out_emp_salary
OUT_EMP_SALARY
--------------
12008
hr@ORCL>
查看函数内容
hr@ORCL> select TEXT from all_source where name='FUN_GETSAL';
TEXT
----------------------------------------------------------------------------------------------------------------------------------------
function fun_getsal
(v_id IN emp.employee_id%type)
return number
is
v_salary emp.salary%TYPE:=0;
begin
select salary into v_salary from emp where employee_id=v_id;
return(v_salary);
end fun_getsal;
已选择9行。
hr@ORCL>
删除函数
drop function fun_getsal;
存储过程
存放在服务器端
编译好的–>速度快
可在函数中调用的程序块
可以没有返回值,也可以有多个返回值
参数模式:IN,OUT,IN OUT。
- IN,就是从调用环境通过参数传入值,在过程中只能被读取,不能改变
- OUT,由过程赋值并传递给调用环境。不能是具有默认值的变量,也不能是常量,过程中要给OUT参数传递返回值
- IN OUT ,具有IN参数和OUT 参数两者的特性,在过程中即可传入值,也可传出值。
实例一
创建一存储过程,带1个输入参数和1个输出参数。
操作对象为scott方案下的emp表。
输入参数用于接收 job(工种),输出参数用于传回该工种的雇员人数。
创建完成后,调用该存储过程。
创建语句
create or replace procedure get_count
(cjob_id in employees.job_id%TYPE, ccount out number)as
begin
select count(*) into ccount from employees where job_id=cjob_id;
end get_count;
调用过程
hr@ORCL> variable count number;
hr@ORCL> begin
2 get_count('ST_MAN',:count);
3 end;
4 /
PL/SQL 过程已成功完成。
hr@ORCL> print count
COUNT
----------
5
函数与存储过程的区别
函数的调用是表达式的一部分(exec
)
存储过程的调用是PL/SQL语句(要有begin
和end
)