PL/SQL Pragmatic Tutorials (Language Fundamentals) -- 块
Posted on 2009-08-11 18:08 hallo 阅读(430) 评论(0) 编辑 收藏 举报PL/SQL 作为 SQL 语言的扩展,主要是为了弥补 4GL 语言过程控制能力太差。它将 3GL 的过程性与 4GL 的灵活性融为一体。这里的语言基础也主要涉及 PL/SQL 中的 3GL 特性。
PL/SQL 的过程化结构将分别详述。
■ PL/SQL 块结构(PL/SQL Block Structure)
■ PL/SQL 字符集(PL/SQL Character Set)
■ 标识符(Identifier)
■ 字面量(Literals)
■ 分号(“;”)定界符(Semicolon Delimiter)
■ 注释(Comments)
■ 编译指示(PRAGMA) 关键字
■ 标签(Labels)
1. PL/SQL Block Structure
PL/SQL 程序的基本单位是 块(Block) 。PL/SQL 程序也都是由块来组成的。通常有如下四种块结构
● 匿名块(Anonymous Block) -- 动态生成,只能被执行一次
● 署名块(Named Block) -- 标记名称的块,通常有四种形式。
○ 过程(Procedure)
○ 函数(Function)
○ 触发器(Trigger)
○ 包(Package)
1.1 匿名块(Anonymous Block)
匿名块的语法结构如下
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Note: 方括号表示匿名块的可选部分。在 BEGIN 和 END 之间必须包含一条可执行语句。
下面是一些简单匿名块代码
★ 最简单的匿名块
DBMS_OUTPUT.PUT_LINE(SYSDATE);
END
★ 带有声明的匿名块
l_right_now VARCHAR2(9);
BEGIN
l_right_now := SYSDATE;
DBMS_OUTPUT.PUT_LINE(l_right_now);
END;
★ 带有异常处理的匿名块
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
通常匿名块执行一系列的语句,然后终止,其行为类似于过程。事实上,匿名块就是一个 匿名过程(Anonymous Procedures) 。
1.2 署名块(Named Block)
署名块包括了四种结构,过程(Procedure) 、函数(Function) 、触发器(Trigger) 和 包(Package)
1.2.1 过程(Procedure)
创建过程的语法结构如下
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
1.2.2 函数(Function)
创建函数的语法结构如下
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Note: 由于 Oracle 允许在 SQL 语句中调用函数,所以函数的 HEADER 部分较之过程包含有更多的可选组件。
1.2.3 触发器(Trigger)
触发器(Trigger) 的结构类似于过程或函数,都是拥有声明、执行和异常处理的带名 PL/SQL 块。
创建触发器的语法结构如下
★ 创建 DML 触发器
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
★ 创建 DDL 触发器
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
1.2.4 包(Package)
包(Package) 是一个将相关对象进行打包处理,形成一个独立的 PL/SQL 结构。通常包含两个分离的部件 包规范(Package Specification) 和 包主体(Package Body)
创建包规范的语法结构如下
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Note: 包规范(Package Specification) = 包头(Package Header)