存储过程
存储过程是Oracle开发者在数据转换或查询报表时经常使用的方式一。存储过程是一种命名PL/SQL程序块,它将一些相关的SQL语句、流程控制语句组合在一起,用于执行某些特定的操作或者任务,可以将经常需要执行的特定的操作写成过程。通过过程名,就可以多次调用过程,从而实现程序的模块化设计。这种方式极大地节省了用户的时间,也提高了程序的效率。
概述
在Oracle中,可以在数据库中定义子程序,在子程序中将一些固定的操作集中起来,由Oracle数据库服务器完成,以完成某个特定的功能。这种子程序称为存储过程(Procc-Dure)。存储过程可以通俗地理解为是存储在数据库服务器中的封装了一段或多段SQL语句的PL/SQL代码块。在数据库中有一些是系统默认的存储过程,那么可以直接通过存储过程的名称进行调用。另外,存储过程还可以在编程语言中调用,如Java、C#等等。
存储过程优点:
- 存储过程在服务器端运行,执行速度快。
- 存储过程执行一次后驻留在Oracle数据库服务器的高速Cache中,以后再次执行存储过程时,只需从高速Cache中调用已经编译好的代码即可,从而提高了系统性能。
- 存储过程确保了数据库的安全。使用存储过程,可以在禁止用户直接访问应用程序中的某些数据表的情况下,授权执行访问这些数据表的存储过程。
- 自动完成需要预先执行的任务。存储过程可以设置为系统启动时自动执行,而不必在系统启动后再进行手动操作,从而方便了用户的使用,可以自动完成一些需要预先执行的任务。
创建存储过程
CREATE [OR REPLACE] PROCEDURE procedure_name
[Parameter [IN | OUT | IN OUT] data_type1,
Parameter [IN | OUT | IN OUT] data_type2,
......]
IS|AS
声明部分
BEGIN
执行部分
EXCEPTION
异常处理部分
END procedure_name;
- OR REPLACE: 表示如果指定的过程已经存在,则覆盖同名的存储过程。
- Procedure_name: 表示存储过程的名称。
- Parameter: 表示存储过程中的参数。
- IN: 表示向存储过程传递参数。
- OUT: 表示从存储过程返回参数。
- Date_type: 表示传入参数的数据类型,也可以带有默认值。
- AS或IS 后声明的变量主要用于过程体内,且不能加DECLARE语句。
执行存储过程
语法:
方式一:直接调用
SQL> exec Procedure_name;
方式二:在另一个PL/SQL中调用
begin
Procedure_name(parameter1,parameter2,...);
end;
示例:创建一个简单的存储过程Insert_student,该过程可用于向Student表添加数据。
表信息如下:
创建存储过程:
create or replace procedure Insert_student is
begin
insert into Student
values(5,'二狗','男',28,'体育学院');
exception
when dup_val_on_index then
dbms_output.put_line('重复的学生ID');
when others then
dbms_output.put_line('发生其它错误!');
end Insert_student;
执行存储过程:
SQL> set serveroutput on; --保证DBMS_OUTPUT.PUT_LINE成功输出
SQL> exec Insert_student;
重复的学生ID
PL/SQL procedure successfully completed
查看存储过程
存储过程一旦被创建就会存储到数据库服务器上,Oracle通过使用视图USER_SOURCE查看已经存在的存储过程脚本。
查看存储过程Insert_student的脚本
user_procedures视图的部分类说明
列 | 类型 | 说明 |
---|---|---|
OBJECT_NAME | VARCHAR2(30) | 对象名,可以是过程、函数或包名 |
PROCEDURE_NAME | VARCHAR2(20) | 过程名 |
AGGREGATE | VARCHAR2(3) | 过程是否是聚合函数。该值为YES或NO |
IMPLTYPEOWNER | VARCHAR2(30) | 实现类型(如果有的话)的所有者名称 |
IMPLTYPENAME | VARCHAR2(30) | 实现类型(如果有的话)名 |
PARALLEL | VARCHAR2(3) | 过程是否支持并行查询。该值为YES或NO |
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。