存储过程和存储函数是用来让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加程序包名就可以打印出它里面的所有方法