oracle PL/SQL编程语言之存储过程和存储函数

(本文章内容仅在windows10下经测试能够运行,不能保证其他环境下的可靠性)

目录

1)存储过程

2)存储函数

3) 以上两者区别

4)数据类型问题

 

 

存储过程

概念:存储过程是提前编译好的一段PL/SQL语言放置在数据库中,可以直接被调用,通常是一些固定的业务逻辑

创建存储过程语法:
create [or replace] procedure 存储过程名([参数 in/out 参数类型])
is/as
begin
业务逻辑
end;

关键字解析:
1)create :表示创建一个新的存储过程
2)replace :表示替换一个存储过程
3)procedure: 表示创建的是一个存储过程
4)in :可省略,默认为in, 使用该关键字修饰的参数不能用于into 和 :=赋值
5)out :不可省略,使用out该关键字修饰的参数必须使用into或:=进行赋值,否则报错,可以实现返回多个值
6)is/as: 将业务逻辑保存到存储过程中
7)begin...end;:存储过程业务逻辑的开始和结束
 
创建存储过程示例代码如下: 
--创建一个给emp表指定编号员工增加工资10的存储过程
create or replace procedure p1(eno emp.empno%type)
is 
begin
  update emp set sal = sal + 10 where empno = eno;
  commit;
end;

select ename,sal from emp where empno = 7788;

 

测试存储过程示例代码如下:

--测试使用存储过程
--语法:存储过程名(实参列表);
declare

begin
  p1(7788);  
end;

 

存储函数

概念:与存储过程相似,但是必须有返回值
定义存储函数
语法:
create [or replace] function 函数名(形参 in/or 参数类型...)return 返回值类型
is
返回值变量 变量类型
begin
函数体
返回变量
end;
 
关键字解析:
1)create :表示创建一个新的存储过程
2)replace :表示替换一个存储过程
3)funtion :表示创建的是一个存储函数
4)in :可省略,默认为in, 使用该关键字修饰的参数不能用于into 和 :=赋值
5)out :不可省略,使用out该关键字修饰的参数必须使用into或:=进行赋值,否则报错,可以实现返回多个值
6)is/as :将业务逻辑保存到存储过程中
7)begin...end;:存储过程业务逻辑的开始和结束

 

创建存储函数示例代码如下:

---创建一个计算emp表指定员工编号的员工的年薪的存储函数
create or replace function f_yearsal(eno emp.empno%type) return number
is
s number(10);
begin
  select sal * 12 + nvl(comm,0) into s from emp where empno = eno;
  return s;
end;

 

测试存储函数示例代码如下:

--测试使用存储函数
declare
  s number(10);
begin
  s := f_yearsal(7788);
  dbms_output.put_line(s);
end;

需要注意的是,带有返回值的存储函数调用时必须使用参数接收返回值。 

 

 

存储过程和存储函数的区别

1)一般来说存储函数有返回值,存储过程无返回值,但是实际上均可通过out关键字返回多个值

2)通过存储函数有返回值的特性,可以在使用存储函数自定义函数在sql语句中使用,而存储过程则无法实现该功能。

 

存储过程和存储函数创建过程中数据类型声明需要注意的地方

1)返回值不能声明长度

2)参数不能声明长度

 

posted @ 2020-06-06 22:27  DNoSay  阅读(306)  评论(0编辑  收藏  举报