PL/ SQL 块:结构、语法、匿名示例
什么是 PL/SQL 块?
在 PL/SQL 中,代码不是以单行格式执行的,而是始终通过将代码分组到称为块的单个元素中来执行。在本教程中,您将了解这些块。
块包含 PL/SQL 和 SQL 指令。所有这些指令将作为一个整体执行,而不是一次执行单个指令。
块结构
PL/SQL 块具有预定义的结构,代码将按照该结构进行分组。以下是 PL/SQL 块的不同部分。
- 声明部分
- 执行部分
- 异常处理部分
下图说明了不同的 PL/SQL 块及其部分顺序。
声明部分
这是 PL/SQL 块的第一部分。此部分是可选部分。此部分将声明块中所需的变量、游标、异常、子程序、编译指令和集合。以下是此部分的更多特征。
- 此特定部分是可选的,如果不需要声明,可以跳过。
- 如果存在的话,这应该是 PL/SQL 块中的第一个部分。
- 对于触发器和匿名块,此部分以关键字“DECLARE”开头。对于其他子程序,此关键字将不存在。相反,子程序名称定义之后的部分标记声明部分。
- 此部分应始终紧接着执行部分。
执行部分
执行部分是主要且强制的部分,它实际执行其中编写的代码。由于 PL / SQL 期望此块中有可执行语句,此块不能为空块,即,它应至少包含一行有效的可执行代码。以下是此部分的更多特征。
- 这可以包含 PL/SQL 代码和 SQL 代码。
- 这可以包含一个或多个块作为嵌套块。
- 本节以关键字“BEGIN”开始。
- 此部分后面应该跟有“END”或异常处理部分(如果存在)
异常处理部分
程序在运行时不可避免地会出现异常,因此需要处理 Oracle 在块中提供了异常处理部分。此部分还可以包含 PL/SQL 语句。这是 PL/SQL 块的可选部分。
- 这是处理执行块中引发的异常的部分。
- 本节是 PL/SQL 块的最后一部分。
- 来自此部分的控制永远不能返回到执行块。
- 本节以关键字“EXCEPTION”开头。
- 此部分后面应始终跟有关键字“END”。
关键字‘END’标志 PL/SQL 块的结束。
PL/SQL 块语法
以下是 PL/SQL 块结构的语法。
DECLARE --optional <declarations> BEGIN --mandatory <executable statements. At least one executable statement is mandatory> EXCEPTION --optional <exception handles> END; --mandatory /
请注意: 块后面总是应该跟着“/”,它会向编译器发送有关块结束的信息。
PL/SQL 块的类型
PL/SQL 块主要有两种类型。
- 匿名区块
- 命名块
匿名区块
匿名块是未指定任何名称的 PL/SQL 块。它们需要在同一会话中创建和使用,因为它们不会作为数据库对象存储在服务器中。
由于它们不需要存储在数据库中,因此不需要编译步骤。它们是直接编写和执行的,并且编译和执行在单个进程中发生。
以下是匿名块的更多特征。
- 这些块没有指定任何参考名称。
- 这些块以关键字“DECLARE”或“BEGIN”开头。
- 由于这些块没有任何引用名称,因此无法存储以供以后使用。它们应在同一个会话中创建和执行。
- 他们可以调用其他命名块,但无法调用匿名块,因为它没有任何引用。
- 它可以包含嵌套的块,这些块可以是命名的,也可以是匿名的。它也可以嵌套在任何块中。
- 这些块可以包含块的全部三个部分,其中执行部分是强制性的,另外两个部分是可选的。
命名块
命名块具有特定且唯一的名称。它们作为数据库对象存储在服务器中。由于它们可用作数据库对象,因此只要它们存在于服务器上,就可以引用或使用它们。命名块的编译过程在将它们创建为数据库对象时单独进行。
以下是命名块的更多特征。
- 这些块可以被其他块调用。
- 该块结构与匿名块相同,只是它永远不会以关键字“DECLARE”开头。相反,它将以关键字“CREATE”开头,该关键字指示编译器将其创建为数据库对象。
- 这些块可以嵌套在其他块中。它还可以包含嵌套块。
- 命名块基本上有两种类型:
- 程序
- 功能
我们将在后面的教程中的“过程”和“功能”主题中了解有关这些命名块的更多信息。
总结
读完本教程后,您应该了解 PL/SQL 块及其类型、块的不同部分及其用法。命名 PL/SQL 块的详细描述将在后面的教程中介绍。