存储过程与存储函数

一、存储过程

1、语法如下:

create [or replace] Procedure 名称
as
PLSQL子程序体;

2、栗子:

简单的栗子

1、创建

--第一个存储过程 打印一个Hello World
create or replace PROCEDURE SayHelloWorld--如果存在就修改
as
--说明部分
begin
DBMS_OUTPUT.PUT_LINE('Hello World');--注意这里用单引号
end;

2、调用方式:

2.1、exec SayHelloWorld
2.2、begin
SayHelloWorld();
SayHelloWorld();
end;
/

命令打开Oracle,打印

 带参数的存储过程

 举例:为指定的同学,增加学费,并打印出增加前后的学分。

create or replace procedure raisesagrade(eno in number)--in 表示输入参数
as
--定义一个变量
psal  emp.sal%type; --emp是一张表
begin
--得到学生添加前的学分
select sal into psal from EMP where empno=eno;
--给学生增加学分
update emp set sal=sal+100 where empno=eno;
--需不需要commit
--一般不在存储过程或者存储函数中提交或者回滚,因为不能保证在恰当时候执行
--打印
dbms_output.put_line('增加前:'||psal|| '增加后:'||(psal+100));

end;

调用方式:

begin
raisesagrade(7369);
raisesagrade(7499);
commit;
end;
/

 

二、存储函数

1、创建语法如下:

create [or replace] FUNCTION 函数名(参数列表)
return 函数值类型
AS
PLSQL子程序体;

 

2、栗子

2.1、创建

--存储函数  查询某个员工的年收入
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+pcomm;--输出表达式中如果有空值,那么这个表达式最后就是为空值。
   return psal*12+nvl(pcomm,0);
  end;

2.2、调用

 DECLARE
 ENO NUMBER;
 v_Return NUMBER;
 BEGIN 
   ENO:=7369;
   v_Return:=queryempincome(ENO=>ENO);
   DBMS_OUTPUT.PUT_LINE('v_Return='||v_Return);
   v_Return:=v_Return;
 END;

2.3、运行结果

v_Return=13200

 

三、in和out参数

1、存储过程、存储函数与out参数的关系

 

posted @ 2017-08-29 17:42  小轩窗,正梳妆  阅读(240)  评论(0)    收藏  举报