跳到主要内容

PL 的主要功能

PL 将 SQL 的数据处理能力与过程语言的处理能力相结合,并支持直接处理 SQL 语句,而无需学习新的 API。

与其他过程编程语言一样,PL 支持声明常量和变量、控制程序流、定义子程序以及捕获运行错误。

异常处理

PL 可以便捷的检测和处理错误。

当发生错误时,PL 会报告异常,数据库当前执行任务被停止,并对相应的 PL 块进行异常处理。所以使用 PL 的时候不必像 C 程序那样对每个操作进行排查。

PL 块

PL 源程序的基本单元是块,由声明和语句组成。

PL 块由关键字 DECLAREBEGINEXCEPTIONEND 来定义。这些关键字分别将块分为声明部分、可执行部分和异常处理部分,仅可执行部分是必需的。

PL 块的声明是本地属性,在块执行完后不再存在,这样可以避免变量和子程序的命名空间混乱。

块可以被其他块嵌套。由于块是可执行语句,因此它可以出现其他块的可执行语句中。每个 PL 块可以设置一个标签。

PL 块又包含匿名块,您可以将匿名块提交给交互式工具或者加载到程序中,该块在交互式工具或程序中只运行一次,并不存储于数据库中。

变量和常量

PL 支持声明变量和常量,并可以在表达式中使用。

在程序运行时,变量的值可以更改,但是常量的值不能更改。

程序包

程序包由逻辑上相关的 PL 类型、变量、常量、子程序、游标和异常组成。

程序包被编译并存储在数据库中,所以可以将程序包视为一种应用程序。

您可以编写自己的程序包,还可以使用 seekdb 自带的系统包。

触发器

触发器是一个已命名的 PL 单元,它存储在数据库中,并响应和运行数据库中发生的事件,即触发事件。

您可以指定触发器是在某一事件之前还是之后触发,以及触发器是针对每个事件还是该事件的每一行运行。例如,可以创建一个触发器,该触发器在 t1 表每次执行 INSERT 语句时运行。

输入输出

大多数的 PL 输入和输出(I/O)是通过将数据存储在表中或查询表的 SQL 语句完成的。而其余的 PL I/O 均由 seekdb 提供的 PL 系统包完成。

当前版本支持的 PL I/O 处理系统包只有 DBMS_OUTPUT,所以需要使用 mysql 客户端显示 DBMS_OUTPUT 的输出信息,并先执行命令 SET SERVEROUTPUT ON

数据抽象性

seekdb 支持游标、复合变量等数据抽象特性,可以用于处理数据的基本属性,而不必过多地研究其中的细节。

游标

当 seekdb 执行一个 SQL 语句时,它将结果集和处理信息保存在一块未命名的私有内存区域,并设置一个指针来指向这块内存区域起始值,这个指针就是 游标。使用游标,每次可以获取一行记录,游标属性会返回游标的状态信息。

复合变量

PL 包括两种复合变量,即集合和记录。整个复合变量可以作为参数传递给子程序。

集合的内部组件始终是相同的数据类型,被称为元素。每个元素都可以通过唯一索引来访问。集合一般包括列表和数组。

记录的内部组件可以具有不同的数据类型,被称为字段。您可以按名称访问每个字段。记录变量可以保留表的行或表的行中的某些列。

使用 %ROWTYPE 属性

%ROWTYPE 属性可以用来声明表示数据库的表或视图里某一完整或部分行的记录类型。

对于完整或部分行的每一列,记录都有一个具有相同名称和数据类型的字段。记录的结构随着行的结构的变化而变化。

使用 %TYPE 属性

%TYPE 属性可以用来声明与先前声明的变量或列具有相同数据类型的数据项(而无需知道该数据类型是什么)。

如果被引用项目的声明发生更改,那么该引用项目的声明也会做相应更改。%TYPE 属性可以用于声明变量以保留数据库值。

抽象数据类型

抽象数据类型(ADT)由数据结构和子程序组成。ADT 存储在数据库中。ADT 的实例可以存储在表中并用作 PL 变量。

形成数据结构的变量称为属性(Attributes)。操纵属性的子程序称为方法(Methods)。

在字典视图 * _OBJECTS 中,ADT 的 OBJECT_TYPETYPE。在字典视图 * _TYPES 中,ADT 的 TYPECODEOBJECT

控制语句

PL 控制语句对于 SQL 语句来说是最重要的扩展功能。

PL 包括如下三类控制语句:

  • 条件控制语句:为不同条件下的数据值运行不同的语句。

  • 循环控制语句:使用不同的数据值重复执行相同的语句。

  • 顺序控制语句:跳转到指定的标签所对应的语句,也可以不执行任何操作。

单次处理多行查询结果

PL 可以发送 SQL 查询并一次处理多行结果。

您可以使用基本循环控制语句,或只通过使用单个语句完成运行查询、检索结果并处理。