网站首页 > 技术文章 正文
Oracle存储过程在实际数据库开发过程当中会经常使用到,作为一个数据库开发者必备的技能,它有着SQL语句不可替代的作用。所谓存储过程,就是一段存储在数据库中执行某块业务功能的程序模块。它是由一段或者多段的PL/SQL代码块或者SQL语句组成的一系列代码块。
创建Oracle存储过程语法:
create [or replace] procedure 过程名 ( p1 in|out datatype, p2 in|out datatype, ... pn in|out datatype ) is ....--声明部分 begin ....--过程体 end;
语法解析:
1、procedure 关键字是创建存储过程的命令。
2、create [or replace] :如果存储过程已经存在则覆盖替代原有的过程。
3、in|out :存储过程具有入参和出参两种参数选择,in表示的是入参,out表示的是出参,在使用过程的时候,入参必须得有对应的变量传入,出参得有对应的变量接收。
4、datatype表示出入参变量对应的数据类型。
5、is后面跟着的是过程当中使用到的声明变量。
6、begin...end 中间编写的就是存储过程的具体操作。
例子1、创建一个存储过程计算学生某一个课程中成绩在班中的排名,使用存储过程进行计算,返回对应的排名,代码如下:
create or replace procedure sp_score_pm( p_in_stuid in varchar2,--学号 p_in_courseid in varchar2, --课程ID p_out_pm out number--排名 ) is ls_score number:=0; ls_pm number:=0; begin --获取该学生的成绩 select t.score into ls_score from score t where t.stuid = p_in_stuid and t.courseid = p_in_courseid; --获取成绩比该学生高的人数 select count(1) into ls_pm from score t where t.courseid = p_in_courseid and t.score>ls_score; --得到该学生的成绩排名 p_out_pm:=ls_pm+1; exception when no_data_found then dbms_output.put_line('该学生的课程:'||p_in_courseid|| '的成绩在成绩表中找不到'); end;
通过上面的代码,我们可以直接在SQL窗口执行编译,编译成功后,我们就可以调用存储过程来获取学生对应的课程成绩排名了,存储过程需要出入参赋值,因此我们可以通过PL/SQL语句块进行测试,代码如下:
declare ls_pm number;--排名 begin --SC201801001 sp_score_pm('SC201801001','R20180101',ls_pm); dbms_output.put_line('学号:SC201801001,课程号:R20180101 的成绩排名是:'||ls_pm); sp_score_pm('SC201801001','R20180102',ls_pm); dbms_output.put_line('学号:SC201801001,课程号:R20180102 的成绩排名是:'||ls_pm); --SC201801002 sp_score_pm('SC201801002','R20180101',ls_pm); dbms_output.put_line('学号:SC201801002,课程号:R20180101 的成绩排名是:'||ls_pm); sp_score_pm('SC201801002','R20180102',ls_pm); dbms_output.put_line('学号:SC201801002,课程号:R20180102 的成绩排名是:'||ls_pm); end;
结果如下:
存储过程的作用
存储过程的编写相对比较复杂,但是在实际系统开发过程中,还是利用过程来处理一些特定的业务功能,把业务逻辑编写在过程当中。它有哪些优势呢?
1、降低总体开发成本。存储过程把实际执行的业务逻辑PL/SQL块和多条SQL语句封装到存储过程当中,其它开发者只需要调用写好的过程,获取想要的结果,不需要重新理解业务。把业务抽取出来由专门的人来编写。
2、增加数据的独立性。它的作用和视图的作用类似,假如表的基础数据发生变化,我们只需要修改过程当中的代码,而不需要修改调用程序。使得用户程序不需要直接面对基础数据进行编写代码。使得代码内聚程度更高,耦合度更低。
3、提高性能。实际开发过程中,一个业务模块功能的开发可能需要用到多个SQL语句,多个PL/SQL程序块才能解决问题。把它编写进过程,Oracle只需要一次编译,以后随时可以调用。如果不使用过程,直接把许多SQL语句写进程序当中,需要多次编译,而且需要多次连接数据库,大大的降低了性能。
- 上一篇: 必读论文 | 20篇强化学习研究必读论文速递
- 下一篇: 详解oracle分页存储过程---附实例分享
猜你喜欢
- 2024-11-08 oracle 结束被锁的包或存储过程 oracle解除用户锁定语句
- 2024-11-08 c#.Net.NetCore面试(四十六)SQL常用存储过程(一看就懂篇)
- 2024-11-08 Oracle 内核解密之存储篇 简述oracle内存结构的主要组成部分
- 2024-11-08 Oracle探究_JAVA存储过程_开发指引《中》
- 2024-11-08 Oracle存储过程编程:流程控制选择结构和循环结构总结
- 2024-11-08 Oracle探究_JAVA存储过程_开发指引《上》
- 2024-11-08 Oracle如何快速导出导入存储过程、函数、package等部分元数据
- 2024-11-08 数据库oracle存储过程包和主体的创建
- 2024-11-08 Oracle 存储过程、包、包体如何创建?
- 2024-11-08 【Oracle】Package 存储过程编写以及其他实用技术
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)