PL/SQL结合了SQL的数据操作能力和过程语言的处理能力。使用SQL解决问题时,也可以从PL/SQL程序执行SQL语句,而无须学习新的应用程序接口(API)。与其他过程编程语言一样,PL/SQL允许声明常量和变量、控制程序流、定义子程序和捕获运行时错误。可以将复杂的问题分解为易于理解的子程序,并且在不同的应用程序中重复使用这些子程序。
PL/SQL使检测和处理错误变得容易。发生错误时,PL/SQL会引发异常,正常执行停止,并将控制转移到PL/SQL块的异常处理部分。
PL/SQL源程序的基本单元是块,由关键字DECLARE、BEGIN、EXCEPTION和END定义。这些关键字将块分为声明部分、可执行部分和异常处理部分,块可以嵌套。
PL/SQL允许声明变量和常量,在可以使用表达式的任何地方使用它们。
PL/SQL子程序是一个命名的PL/SQL块,可以重复调用。PL/SQL有两种类型的子程序,即过程和函数,函数可以具有返回值。
包是一个模式对象,可以对逻辑相关的PL/SQL类型、变量、常量、子程序、游标和异常进行分组。一个包被存储在数据库中,许多应用程序可以访问并使用它的内容。
触发器是一个命名的PL/SQL单元,它存储在数据库中,并响应数据库中发生的事件而运行。可以指定触发器是在事件之前还是之后触发,以及触发器是针对每个事件还是针对受事件影响的每一行运行。
大多数PL/SQL输入和输出(I/O)都是通过在数据库表中存储数据或查询这些表的SQL语句完成的。所有其他PL/SQL的I/O都是使用KingbaseES数据库提供的PL/SQL包(dbms_output,UTL_FILE)完成的。
通过数据抽象可以处理数据的基本属性,而无须过多关注细节。
(1)游标。
游标是指向私有SQL区域的指针,该区域存储有关处理特定SQL语句或PL/SQL SELECT INTO语句的信息。可以使用游标一次检索一行的结果集,也可以使用游标属性获取有关游标状态的信息。
(2)复合变量。
复合变量具有内部组件,可以单独访问这些组件,也可以将整个复合变量作为参数传递给子程序。PL/SQL有两种复合变量:集合和记录。在集合中,内部组件始终具有相同的数据类型,称为元素,可以通过其唯一索引访问每个元素。在记录中,内部组件可以是不同的数据类型,称为字段,通过名称可以访问每个字段。
(3)使用%ROWTYPE属性。
%ROWTYPE属性允许声明数据库表或视图的完整或部分行的record变量。对于整行或部分行的每一列,record变量都有一个具有相同名称和数据类型的字段。如果行的结构发生变化,那么记录的结构也会相应地发生变化。
(4)使用%TYPE属性。
%TYPE属性允许在不知道数据类型的情况下声明与先前声明的变量或列具有相同数据类型的数据对象。如果被引用的对象声明发生变化,那么引用对象的声明也会相应改变。
(5)抽象数据类型
抽象数据类型(ADT)由数据结构和操作数据的子程序组成。构成数据结构的变量称为属性,操纵属性的子程序称为方法。ADT存储在数据库中,ADT的实例可以存储在表中,并用作PL/SQL变量。ADT可以将大型系统分成可重用的逻辑组件,以降低复杂性。
控制语句是PL/SQL语言对SQL语言最重要的扩展。PL/SQL有三类控制语句:条件选择语句、循环语句、顺序控制语句。
PL/SQL允许发出SQL查询,并一次处理结果集的一行。既可以使用基本循环,也可以通过使用单独的语句来运行查询,检索结果,实现精确控制。