存储过程与存储函数
一、存储过程和存储函数:指在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。
相同点:完成特定功能的程序;
区别:是否用return语句返回值。
二、创建和使用存储过程
用CREATE PROCEDURE命令创建存储过程和存储函数。
语法:
create or replace procedure 过程名(参数列表)
AS
PLSQL子程序体;
PL/SQL Developer中用dbms_output.put_line输出前需要执行命令set serveroutput on 可以通过键盘手动输入
命令窗口执行
create or replace procedure sayhelloword AS begin dbms_output.put_line('Hello World'); end;
先点击【添加调试信息】,再点击测试
打开测试窗口开始调试:
在DBMS中会有输出打印信息
cmd连接oracle
调用写好的存储过程,两种方法:
1)exec 存储过程名字();
2)使用PL/SQL程序
begin
存储过程名字();
End;
/结束
--创建一个带参数的存储过程: --给指定的员工涨100块钱的工资,并且打印涨前和涨后的薪水 create or replace procedure raisesalary(eno in number) as --定义一个变量存储涨前的新书 psal emp.sal%type; begin --得到员工涨前的薪水 --就是指psal这个变量是引用了表emp中的sal字段的类型。如果emp表中sal的类型变了,psal这个字段的类型也会跟着变化,
总之,psal和表emp中sal字段类型一致。引用型变量可以不用知道该表中类型是什么,只要引用的表中的字段类型改变,定义的变量就跟着改变,
用引用型变量易于维护。 select sal into psal from emp where empno = eno; --给员工涨工资100 update emp set sal=sal+100 where empno = eno; --需不需要commit? --注意:一般不再存储过程或者存储函数中,commit或者rollback; --打印 dbms_output.put_line('涨前:'||psal||' 涨后:'||(psal+100));
end;
打印出信息:涨前:1000 涨后:1100
三、存储函数
函数(Function)为一个命名的存储程序,可带参数,并返回一个计算值。函数和过程的结构类似,但必须有一个RETURN子句,用于返回函数值。
创建函数的语法
create[or replace] functiion 函数名(参数列表)
return函数值类型
as
PLSQL子程序体;
--查询某个员工的年收入 create or replace 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+nvl(pcomm,0); end; /
In 和 out参数
1一般来讲,存储过程和存储函数的区别在于存储函数可以有一个返回值,而存储过程没有返回值。
2过程和函数都可以通过out指定一个或多个输出参数。我们可以利用out参数,在过程和函数中实现返回多个值。
什么时候用存储过程或存储函数?
原则:如果只有一个返回值,用存储函数;否则,就用存储过程。
- -out参数:查询某个员工姓名,月薪,职位
create or replace procedure queryEmpInfo(eno in number, pname out varchar2, psal out number, pjob out varchar2) as begin select ename,sal,empjob into pname,psal,pjob from emp where empno=eno; end;
doc命令,desc 表名 会得到表结构
---???思考问题,如果查询某个原工的所有信息---àout参数太多?
---???查询某个部门中所有原工信息---àout中返回集合?
未完,待续。。。。。