PL/SQL编程_存储程序

在前面的部分介绍了PL/SQL块的基本编写方法。

在SQL*plus 中编写PL/SQL程序,并在SQL*plus 中执行它, PL/SQL块的代码就存放在SQL*plus的缓冲区中。
如果在SQL*plus 中执行了其他的SQL语句或PL/SQL块,缓冲区中就会存放新的代码,原来的PL/SQL块就会被从缓冲区中清除出去。
这种没有名称只是临时存放在缓冲区中的PL/SQL块叫做匿名块。
匿名块就是没有名字的PL/SQL块,它仅存放在缓冲区中,只能在当前SQL*plus环境中执行。
如果希望PL/SQL块能随时被调用执行,并且能被数据库用户共享,就需要创建存储程序
存储程序是有名字的PL/SQL块,用户可以根据它的名字进行多次调用。

存储程序在创建时经过了编译优化,被存放在数据库中,任何用户只要有适当的权限,就可以调用它。
而且在调用时无需再进行编译,因此能以很快的速度执行。
与匿名块相比,存储程序是作为数据库对象存储在数据库中的,因此,首先要在数据库中创建存储程序。

存储程序的调用可以在SQL语句中、应用程序中、SQL*plus 中以及其他PL/SQL块中进行。
在第一次被调用时,存储程序的代码被装载到系统全局区的共享池中,以后再次调用时直接从共享池中取出代码即可执行。
存储程序与前面介绍的子程序的区别在于子程序是完成某个特定功能的程序段,它本身并不能单烛执行,只能作为一个模块,在一个PL/SQL块内部被调用执行。
而存储程序是一个可单独执行的程序,它可以包含多个子程序,可以在SQL语句中、应用程序中、SQL*plus 中以及其他PL/SQL块中被调用执行。
存储程序的形式包括:存储过程、存储函数、触发器和程序包等。

存储过程

如果用户要在自己的模式中创建存储过程,需要具有CREATE PROCEDURE系统权限,如果要在其他用户的模式中创建存储过程,则需要具有CREATE ANY PROCEDURE 系统权限
创建存储过程的语法为:

CREATE OR REPLACE PROCEDURE 过程名(参数1,参数2 ...)

AUTHID CURRENT_USER | DEFINER

AS

  声明部分

BEGIN

  可执行部分

EXCEPTION

  异常处理部分

END;

其中OR REPLACE选项的作用是当同名的存储过程存在时,首先将其删除,再创建新的存储过程。
当然,条件是当前用户具有删除原存储过程的权限。

存储过程在创建过程中已经进行了编译和优化。
如果需要对存储过程进行修改,不能直接修改它的源代码,只能执行CREATE命令重新创建。
存储过程、存储函数、程序包都是这样的情况。
存储过程可以带有参数,这样在调用存储过程时就需要指定相应的实际参数。

如果没有参数,过程名后面的圆括号和参数列表就可以省略了。
每个参数的定义格式为:

参数名 参数传递模式 数据类型 := 默认值

参数各定义中各部分的用法与子程序中的参数完全相同。

AUTHID 选项用来规定存储过程执行时的权限。

这个选项有两个可选值,即CURRENT_USERDEFINER ,二者只能选择其中一个。
过程的执行者和创建者可能不是同一个用户,如果使用CURRENT_USER创建存储过程,那么在调用时,该过程以当前登录用户的身份执行。
为此,过程的创建者必须授予当前用户执行该过程的权限。

如果以DEFINER创建存储过程,那么在调用时,该过程将以创建者身份执行,这是创建存储过程时默认的选项。
在存储过程中可以定义变量、类型、子程序、游标等元素,定义的方法与在匿名块中完全相同。

这里不再详细描述。存储过程的声明部分开始于关键宇AS ,结束于关键字BEGIN ,而
且不需要使用关键字DECLARE 。
存储过程的可执行部分是它的主要部分,它可以包含SQL语句和流控制语句,是存储过程
功能的集中体现。异常处理部分用来处理存储过程在执行过程中可能出现的错误。例如,下面
的代码用来创建存储过程total_income ,它的功能是计算某部门员工的总收入。这个过程有一
个参数,代表部门编号,并指定了默认值。这样,在调用时,如果提供了参数,则计算指定部
门的数据,否则将计算所有员工的数据。

时间: 2024-08-25 09:14:58

PL/SQL编程_存储程序的相关文章

Oracle之PL/SQL编程_流程控制语句

选择语句 1. if...then 语句 语法: if < condition_expression > then plsql_sentence end if; condition_expression:表示一个条件表达式,其值为 true 时,程序会执行 if 下面的 PL/SQL 语句: 如果其值为 false,则程序会跳过if 下面的语句而 直接执行 end if 后边的语句. plsql_sentence:condition_expression 为 true 时,要执行的语句. 2.

PL/SQL编程_变量

在PL/SQL块中可以定义变量和数据类型,这使得PL/SQL块对数据的处理更加灵活. 变量和类型的定义放在PL/SQL块的变量声明部分. 变量的定义与使用 变量的定义有两种格式,分别为:变量名 类型 [约束][DEFAULT 默认值]变量名 类型[约束][:=初始值]其中用方括号限定的部分是可选的. 约束用来规定变量必须满足的条件,比如“ NOTNULL”约束指定变量不能为空值,这样在定义变量的时候就要为其指定初始值或默认值.变量名要遵守一定的命名规则. 变量名必须以字母开头,包含数字.字母.下

PL/SQL编程_子程序设计

利用PL/SQL可以进行模块化程序设计. 在一个PL/SQL块中,可以定义若干个子程序. 把一些功能相对独立.需要经常执行的代码定义为一个子程序,在需要时根据子程序的名字进行调用.这样不仅便于程序设计和编码,而且利于程序的调试.PL/SQL有两种形式的子程序,即过程和函数. 在子程序中也可以定义变量.类型.游标等,也可以进行异常处理.在调用于程序时,可以向子程序传递参数. 过程与函数的区别在于函数具有返回值,可以向调用者返回执行结果,而过程没有返回值. 如何使用过程 子程序的定义出现在PL/SQ

PL/SQL编程_游标

游标是一种私有的工作区,用于保存SQL语句的执行结果.在执行一条SQL语句时,数据库服务器会打开一个工作区,将SQL语句的执行结果保存在这里.在Oracle数据库中有两种形式的游标:隐式游标和显式游标.隐式游标是由数据库服务器定义的,显式游标是用户根据需要自己定义的. 隐式游标隐式游标是数据库服务器定义的一种游标.在执行一条DML语句或SELECT语句时,数据库服务器将自动打开一个隐式游标,存放该语句的执行结果.在一个PL/SQL块中可能有多条DML或SELECT语句,隐式游标始终存放最近一条语

PL/SQL编程_概述

关于PL/SQL的内容,主要包括匿名块.存储过程和存储函数三种形式的PL/SQL块,以及在PL/SQL 中如何使用变量.类型.流控制语句.游标.触发器.异常等内容,以及如何利用PL/SQL块访问数据库中的数据. PL/SQL概述 如果说SQL是一种标准的数据库访问语言,那么PL/SQL则是Oracle公司开发的一种编程语言,它是对SQL的扩充.在PL/SQL程序中,可以定义变量.数据类型.函数以及过程,可以使用流控制语句,可以包含SQL语句,还可以进行错误处理.利用PL/SQL程序,可以对数据库

Oracle之PL/SQL编程_数据类型与定义变量和常量

-----------------------------------基本数据类型----------------------------------- 1.数值类型 NUMBER(P,S) 参数 P 表示精度,参数 S 表示刻度范围. 精度是指数值中所有有效数字的个数,而刻度范围是指小数点右边小数位的个数. "子类型" 是与 NUMBER 等价的类型别名. 子类型:DEC.DECIMAL.DOUBLE.INTEGER.INT.NUMERIC.SMALLINT.BINARY_INTEG

pl/sql编程基础

PL/SQL 1.过程.函数.触发器是pl/sql编写的 2.过程.函数.触发器是存放在oracle数据库中的 3.pl/sql是非常强大的过程化语言 4.过程.函数.触发器可以在java程序中调用 pl/sql编写能节省一点时间就是提高了性能(量大),java直接调用数据库存放的过程,解析时间就节省下来了,提高了性能 模块化的设计思想----->存储过程 网络传输(java程序中编写的sql语言),直接调用数据库的过程节省了传输量 提高安全性(存储过程避免了数据库信息的泄漏) 缺点: 移植性不

ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE PL/SQL编程之八:把触发器说透 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的.   本篇主要内容如下: 6.1 引言 6.2 创建函数 6.3 存储过程 6.3.1 创建过程 6.3.2 调用存储过程 6.3.3 AUTHID 6.3.4 

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)                [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]