Oracle存储过程与存储函数-入门

简介: Oracle存储过程与存储函数-入门

网络异常,图片无法展示
|


文章思维导图


一. 存储过程和存储函数的定义


  • 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数。复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL 语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。


  • 区别:是否可以通过return返回函数值。

存储函数可以通过return返回函数值;而存储过程不可以。


  • 注意:由于通过out参数,存储过程也可以返回函数值,所以存储过程和存储函数已经没有太大的区别了。而存储函数仍然存在,是由于oracle不断升级,需要实现向下兼容,所以存储函数就一直存留着。


二. 存储过程


1. 创建和使用存储过程


create procedure命令建立存储过程,语法如下:

create [or replace] procedure 过程名(参数列表)
as   -- as不可以省略
PLSQL子程序体;


注意事项:


1> 存储过程或者存储函数,只能创建或者替换。

2> 参数可以带也可以不带。

3>  as相当于PLSQL语句中的declare,用来声明变量、游标等,但是不可以省略


2. 入门案例:


(1)不带参数的存储过程:不用带括号

create or replace procedure sayHello
as
begin
   dbms_output.put_line('HelloWorld');
end;
/


调用方式:


  • <1> 使用execute:
    exec是sqlplus命令,只能在sqlplus中使用,使用时,exec可以直接跟过程名(可以省略括号);


控制台执行示例:

SQL> set serveroutput on;
SQL> exec sayHello;


  • <2> 使用call:


使用call时,要带上括号;call为SQL命令使用时,对场景没有限制。
控制台执行示例:

SQL> set serveroutput on;
SQL> call sayHello();


  • <3> 使用PLSQL语句调用:


控制台执行示例:

SQL> set serveroutput on;
SQL> begin
         sayHello;
    end;
/


(2)带参数的存储过程:


  • 给指定的员工涨100元工资,并且打印涨前和涨后的薪水:

create or replace procedure addSal(pempno in emp.empno%type)
as
    pename emp.ename%type;
    beforesal emp.sal%type;
    aftersal emp.sal%type;
begin
    select ename,sal into pename,beforesal from emp where empno=pempno;
    aftersal:=beforesal+100;
    update emp set sal=aftersal where empno=pempno; 
    dbms_output.put_line('姓名: '||pename||' 涨前工资:'||beforesal||'涨后工资:'||aftersal);
end;
/


网络异常,图片无法展示
|


执行代码截图


** 注意事项:**


  • <1> 要说明,参数是输入参数(in)还是输出参数(out);


  • <2> 为保证调用多个存储过程中处在同一个事务中,所以一般不在存储过程或者存储函数中,commit或rollback;


3. 调试存储过程:


网络异常,图片无法展示
|


SQL Developer 调试存储过程


** 注意事项:**


(1) oracle数据库和PLSQL工具都是放在同一个机器上;


(2) 在开启调试时,可能会报出权限不够的错误信息,通过下面方式进行授权:


网络异常,图片无法展示
|


授权


三. 存储函数
1. 存储函数:


  • 函数(Function)为一命名的存储程序,可带参数,并返回一计算值.
  • 函数和过程的结构类似,但必须有一个return子句,用于返回函数值.


2. 创建存储函数的语法:

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


  • 注意事项:


  • (1) 与存储过程注意事项类似,不同的是,必须有个返回值;
  • (2) 参数列表可以有,也可以没有.当没有时,函数名后面不要带括号.

create or replace function queryempannal(pempno in number)
return number
as
  psal emp.sal%type;
  pcomm emp.comm%type;
begin
  select sal,comm into psal,pcomm from emp where empno=pempno;
  return psal*12+nvl(pcomm,0);
end;


四. in和out参数


1.概述


  • (1) 一般来讲,存储过程和存储函数的区别在于存储函数可以有一个返回值;而存储过程没有返回值.


  • (2) 过程和函数都可以通过out指定一个或多个输出参数.我们可以利用out参数,在过程和函数中实现返回多个值.
  • a. 存储过程和存储函数都可以有out参数;
  • b. 存储过程和存储函数都可以有多个out参数;
  • c. 存储过程可以通过out参数来实现返回值;


  • (3) 什么时候用存储过程/存储函数?
  • 原则:如果只有一个返回值,用存储函数;否则,就用存储过程.

create or replace procedure queryempinform(eno in number,
                                           pename out varchar2,
                                           psal out number,
                                           pjob out varchar2 )
as
begin
  select ename,sal,job into pename,psal,pjob from emp where empno=eno;
end;
/


相关文章
|
1月前
|
SQL Oracle 关系型数据库
[Oracle]面试官:你举例几个内置函数,并且说说如何使用内置函数作正则匹配
本文介绍了多种SQL内置函数,包括单行函数、非空判断函数、日期函数和正则表达式相关函数。每种函数都有详细的参数说明和使用示例,帮助读者更好地理解和应用这些函数。文章强调了字符串操作、数值处理、日期计算和正则表达式的使用方法,并提供了丰富的示例代码。作者建议读者通过自测来巩固学习成果。
26 1
[Oracle]面试官:你举例几个内置函数,并且说说如何使用内置函数作正则匹配
|
23天前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
|
5月前
|
SQL Oracle 算法
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的物理存储结构
Oracle的物理存储结构包括数据文件、联机重做日志文件、控制文件、归档日志文件、参数文件、告警日志文件、跟踪文件和备份文件。这些文件在硬盘上存储数据库的各种数据和日志信息,确保数据库的正常运行和故障恢复。视频讲解和详细说明见原文。
|
1月前
|
存储 Oracle 关系型数据库
oracle服务器存储过程中调用http
通过配置权限、创建和调用存储过程,您可以在Oracle数据库中使用UTL_HTTP包发起HTTP请求。这使得Oracle存储过程可以与外部HTTP服务进行交互,从而实现更复杂的数据处理和集成。在实际应用中,根据具体需求调整请求类型和错误处理逻辑,以确保系统的稳定性和可靠性。
68 0
|
5月前
|
SQL Oracle 关系型数据库
|
5月前
|
Oracle 关系型数据库 数据挖掘
|
2月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
200 64
|
17天前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
63 11
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。

推荐镜像

更多