本文共 1966 字,大约阅读时间需要 6 分钟。
存储过程是Oracle开发者在数据转换或查询报表时经常使用的方式一。存储过程是一种命名PL/SQL程序块,它将一些相关的SQL语句、流程控制语句组合在一起,用于执行某些特定的操作或者任务,可以将经常需要执行的特定的操作写成过程。通过过程名,就可以多次调用过程,从而实现程序的模块化设计。这种方式极大地节省了用户的时间,也提高了程序的效率。
在Oracle中,可以在数据库中定义子程序,在子程序中将一些固定的操作集中起来,由Oracle数据库服务器完成,以完成某个特定的功能。这种子程序称为存储过程(Procc-Dure)。存储过程可以通俗地理解为是存储在数据库服务器中的封装了一段或多段SQL语句的PL/SQL代码块。在数据库中有一些是系统默认的存储过程,那么可以直接通过存储过程的名称进行调用。另外,存储过程还可以在编程语言中调用,如Java、C#等等。
存储过程优点:
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;
语法:
方式一:直接调用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/