Oracle之存储过程和存储函数

存储过程和存储函数是用来让java代码来调用的. 

存储过程和存储函数其实就是拿qlspl写的子程序,存储过程没有返回值,存储函数可以用return 返回值

创建一个存储过程 

调用方式有两种

 带参的存储过程,创建,参数中的in有两个可选值,in或者out,in代表整个参数是外面传进来的,后面的is和as的作用一样两种写法,在这个过程当中没有commit提交,因为在调用的时候可能一下调用多次,到时候再提交可以保证在一个事务中完成.

--给指定的员工涨100,并且打印涨前和涨后的薪水
create or replace procedure raiseSalary(eno in number)
is
       --定义变量保存涨前的薪水
       psal emp.sal%type;
begin
       --得到涨前的薪水
       select sal into psal from emp where empno=eno;
       
       --涨100
       update emp set sal=sal+100 wher empno=eno;
       
       --要不要commit?
       
       dbms_output.put_line('涨前:'||psal||'   涨后:'||(psal+100));
end raiseSalary;

运行完下面的代码后

--查询某个员工的年收入
create or replace function queryEmpIncome(eno in number) 
return number
is
       --定义变量保存月薪和奖金
       psal emp.sal%type;
       pcomm emp.comm%type;
begin
       --得到月薪和奖金
       select sal,comm into psal,pcomm from emp where empno=eno; 
       
       --返回年收入
       return psal*12+nvl(pcomm,0);

end queryEmpIncome;

测试

把这参数改为你要查的参数,然后点确定

这就说输出的值

在上面提到过程是没有返回值的,函数有返回值,其实这句话是不对的,过程和函数都有out参数,有了这个out参数这两个就都有了返回值,并且可以返回多个值,如果只有一个返回值的时候就用存储函数,如果没有或者多个返回值的时候就用存储过程,这不是必须的,只是一般来讲.

示例

--查询某个员工的姓名 薪水和职位

create or replace procedure queryEmpInformation(eno in number,
                                                pename out varchar2,
                                                psal   out number,
                                                pjob   out varchar2)
is
begin
  
   select ename,sal,job into pename,psal,pjob from emp where empno=eno;                                             

end queryEmpInformation;

运行测试,其实=>这种形式也是赋值的操作.

这个需要来回点,才能看到三个值

其实这个早期是没有out返回值的,版本更新后才有了out,使得存储函数多余了,但是写程序要兼容老的版本,再任何环境都能运行

通过desc加程序包名就可以打印出它里面的所有方法

Oracle之包头和包体的创建https://blog.csdn.net/kxj19980524/article/details/86737316

Oracle之java调用存储过程和存储函数https://blog.csdn.net/kxj19980524/article/details/86737385

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值