博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle--存储过程概述、创建和执行
阅读量:2442 次
发布时间:2019-05-10

本文共 1966 字,大约阅读时间需要 6 分钟。

存储过程

存储过程是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 isbegin  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;重复的学生IDPL/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

转载地址:http://pkpqb.baihongyu.com/

你可能感兴趣的文章
谁偷了我的CPU?
查看>>
Microsoft将IE10更新推送到Windows 7
查看>>
liferay_云中的Liferay
查看>>
SQL或NoSQL:Google App Engine-第1部分
查看>>
SitePoint Podcast#178:Web设计过程和创造力
查看>>
移动端获取视频第一帧移动端_后端即服务-第1部分
查看>>
畅谈理想未来为主题的铅笔画_与专家畅谈Node.js
查看>>
SitePoint Podcast#173:释放混乱的猴子
查看>>
php 查询成绩_与专家讨论PHP: 成绩单
查看>>
一年新的一年_一年的云创新
查看>>
使用PHP从Access数据库中提取对象,第2部分
查看>>
openbiz_Openbiz Cubi:健壮PHP应用程序框架,第1部分
查看>>
使用PHP从Access数据库中提取对象,第1部分
查看>>
使用云waf的案例_9种流行的云使用案例
查看>>
类集合转换类集合_PHP中的集合类
查看>>
使用SimplePie消费Feed
查看>>
运算符二进制_基本转换和二进制运算符
查看>>
SitePoint播客#121:在线社区圆桌会议第2部分
查看>>
pchart_用pChart绘制图表
查看>>
Git简介,第1部分
查看>>