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