oracle函数与存储过程

首先是常用的查询
查看当前用户创建的所有函数,存储过程,触发器

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语句(要有beginend)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值