这一周老大安排了学习存储过程的任务,下周要用。现在我们就来看看它到底是干啥的
本文内容:主要是介绍了存储过程和存储函数的基本概念、异同和使用时如何传参和部分细节问题,我们将会在下面的内容中和大家一起学习如何在应用程序中访问存储过程和存储函数,来解决本文末尾的两个思考题。
存储过程和存储函数有相同点:完成特定功能的程序
存储过程和存储函数的区别:是否用return语句返回值(后者可以,前者不可以)
除此之外我们可以认为它们是一样的。
--第一个存储过程:打印Hello World
create or replace procedure sayhelloworld
as
--说明部分
begin
dbms_output_put_line("Hello World");
end;
/
Oracle存储数据库对象默认采用大写的方式,所以在执行脚本后会显示如下内容
PROCEDURE SAYHELLOWORLD 已编译
有两种方式:
利用命令行来进行调用存储过程
进入cmd: sqlplus 用户名/密码@192.168.1.1:1521/orcl
然后因为要打印字符串 所以要打开屏幕输出开关
set serveroutput on
然后就可以利用上面所讲到的两个方法来执行上面的存储过程。
记得我们在传参的时候要指出是传入参数还是传出参数
--创建一个带参数的存储过程:
--给指定的员工涨100元的工资,并且打印涨前和涨后的薪水
create or replace procedure raisesalary(eno in number)
as
--定义一个变量保存涨前的薪水
--引用表中emp.sal这个字段的类型来作为 psal变量的类型
psal emp.sal%type;
begin
--得到员工涨前的薪水
select sal into psal from where empno=eno;
--给该员工涨100
update emp set sal=sal + 100 where empno = eno;
--打印
dbms_output.put_line('涨前: '||psal||' 涨后:'||(psal +100)||' )
end;
/
下面可以运行这个脚本 显示编译成功
begin
raisesalary(7839);
raisesalary(7566);
commit;
end;
/
create [or replace] FUNCTION 函数名(参数列表)
return 函数值类型
AS
PLSQL子程序体;
--存储函数:查询某个员工年收入
create or place function queryempincome(eno in number)
return number
as
--定义变量保存员工的薪水和奖金
psal emp.sal%type;
pcomm emp.comm%type;
begin
--得到该员工的月薪和奖金
select sal,comm into psal,pcomm from emp where empno-eno;
--直接返回年收入
return psal*12 + pcomm;
--上面这条语句要注意 如果有一条为空 那么所有结果都为空 这时我们常常要用到函数nvl函数,改写之后的语句如下
retrun psal*12+nvl(pcomm,0);
end;
/
原则:
- 如果只有一个返回值,用存储函数;否则,就用存储过程。
--out参数:查询某个员工姓名 月薪和职位
create or replace procedure queryempinform(eno in number,
pename out varchar2,
psal out number,
pjob out varchar2)
as
begin
--得到该员工的姓名 月薪和职位
select ename,sal,empjob into pename,psal,pjob from emp where empono=eno;
end;
/
1。查询某个员工的所有信息 —》 out参数太多?
2。查询某个部门中所有员工的所有信息 –》out中返回集合?
会在后面的存储过程/存储函数的文章中写出来
以上内容来自于慕课网http://www.imooc.com/video/7294,转载请注明出处