Oracle数据库学习11之存储结构


匿名块:是只使用一次的PL/SQL程序。(类似C中的匿名函数,块即为代码块)
1.匿名块无名字,不能存储在数据库中,也不是PL/SQL存储程序单元。
2.匿名块由PL/SQL的四个基本组成部分构成,在SQL*PLUS中通过“/”编译执行,不能被重复使用,再次执行时需重新编写并编译执行。
格式:
declare
变量、常量的声明
begin
PL/SQL块
exceptions
异常捕获
end;


PL/SQL子程序:数据库中命名的PL/SQL块,可接受参数,也可传出计算结果


PL/SQL分为:
1.存储过程:用来完成某些操作的任务
2.函数:用来做复杂的计算


PL/SQL子程序室基于PL/SQL块的结构,包含了必要的Begin和end部分,也包括了可选的Exception和Declare部分。
声明部分不再是以Declare开头,而是以Is开头。




存储过程:是利用PL/SQL所提供的Tranact-SQL语言所编写的程序。
可以设计楚复合引用需求的程序:
1.变量说明
2.ANSI兼容的SQL命令
3.一般流程控制命令
4.内部函数




1.存储过程的语法:
过程是为了执行一定的任务而组合在一起的SQL和PL/SQL语句集。
主要包括:声明部分、执行部分、异常处理。执行部分是必须的,声明和异常可选。


声明部分包含:类型、游标、常量、异常、嵌套子程序等声明。所有在声明部分的声明都是本地和局部声明。
执行部分是对声明的变量赋值,和对数据库的操作。
异常处理部分是对过程中出现的异常进行操作以及自定义的一些异常处理。


过程创建时首先被编译,然后以编译的形式被存储在数据库中。然后就可以直接或在PL/SQL语句中调用。


1.创建过程的语法:
create or replace procedure 过程名[(参数1[in|out|in out] 参数类型,参数2,...)] is|as 主体部分

or replace时可选关键字,表示先检查数据库中有无重名过程,若有则先删除再重新创建。
in、out、in out是参数的模式,默认为in
主体部分就是过程的执行语句,一个过程至少应该有一条SQL或PL/SQL语句

1.参数的模式及约束:in、out、in out
in:此模式只是将实参传递进过程内部,在过程的执行过程中为只读。知道过程结束,实参的值都不会改变。
out:此模式主要是赋值,在过程调用结束时控制权会还给过程的环境,此时形参的内容会赋给实参。
in out:此模式是上两种模式的组合,即可将实参传入过程,形参可被读取和写入,过程结束,形参的内容赋给实参。


简单总结:
in:将实参传入,在过程中,形参名不可被赋值,用于给别的变量赋值。即:不能作左值。
out:将形参值传出,在过程中,形参名用于被赋值,而不是给别的变量赋值。即:不能作右值。
in out:可以被赋值和赋值。可作左右值。


存储过程的基本规则:
1.在SQL*PLUS中使用create or replace 子句创建存储程序单元
2.在头部定义所有的参数
3.is表示PL/SQL块的开始,在is以后,不需再用declare开始声明部分,is就表示了声明部分的开始。在is之后,声明再过程中使用的本地变量或常量。
4.声明完成后,以begin开始程序的执行主体。
5.不要在形参处加精度范围,形参的精度取决于传入的实参的精度。若非要对形参限定精度范围,则使用%type,但该限制只作用于实参上。
2.过程主体:
过程的主体是一个拥有声明、执行、异常处理的PL/SQL块。
声明部分是在is或as到begin之间。

3.一个完整的过程声明的结构:
create or replace procedure  过程名 is/as
/*声明部分*/
begin
/*执行部分*/
exception
/*异常处理部分*/
end;(异常处理部分结束)
end;(执行过程结束)
2.存储过程的调用
用户在调用过程时要有权限。若一个用户拥有了一个过程的权限,但没有访问该过程数据表的特权,也能执行。
若过程创建时有形参,在调用时要传入相应的实参,若为in模式的形参,则可用常量或文字作为实参。

权限赋予:
grant execute on 过程名 to 用户名。
将形参和实参一一对应的方法:位置标志法、带名标志法


1.位置标志法:按照形参的位置对应的传入实参。
2.带名标志法:每一个实参都用“=>”符号和形参连接,即:形参=>实参。其中有缺省值的参数若想用缺省值可表示为:形参=>形参
一般情况都将有缺省值的形参定义在形参的末尾。


3.重新编译过程
用alter procedure 过程名,重新编译过程,重新编译不会改变其声明和定义,要想改变声明和定义则要用create or replace procedure。
alter procedure只能用在独立的过程中,不能用在包中的过程。
当一个过程被重新编译后就存储在数据库中,,调用该过程不需要重新编译。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值