Oracle PL / SQL块结构

在PL / SQL中,最小的有意义的代码分组被称为块。

块代码为变量声明和异常处理提供执行和作用域边界。

PL / SQL允许您创建匿名块和命名块。

命名块可以是包,过程,函数,触发器或对象类型。

PL / SQL是SQL的过程语言扩展,它具有块结构。

每一段代码都在块中执行。

PL / SQL块最多有四个不同的段,其中只有一个是强制的:

 

语法

PL / SQL有四个关键字:

DECLARE:每个PL / SQL块都有一个声明部分。

这是为游标,数据类型定义,变量,嵌入函数和过程分配内存的位置。

BEGIN:每个PL / SQL块都有一个可执行部分。

它以关键字BEGIN开头。

BEGIN标志着你把程序逻辑放在哪里的开始。

并且每个PL / SQL程序必须至少有一行可执行代码,即使它是关键字NULL,这意味着没有操作。

EXCEPTION:每个PL / SQL块都有一个异常处理部分。

它以关键字EXCEPTION开头。

这是您将捕获任何数据库或PL / SQL错误的地方。

与声明部分一样,您不会使用异常处理部分,但它仍然存在。

END:每个PL / SQL块以关键字END结束。

 

匿名块

我们将从一个匿名的PL / SQL块开始。

匿名blick不保存在数据库中。

它们非常适合创建测试单元。

匿名PL / SQL块的一般语法如下:


[ DECLARE ... declaration statements ... ] 
BEGIN ... one or more executable statements ... 
[ EXCEPTION 
... exception handler statements ... ] 
END; 

方括号表示语法的可选部分。

您必须具有BEGIN和END语句,并且必须至少有一个可执行语句。

 

注意

以下代码是匿名PL / SQL块的示例。

注释描述不同的部分。


-- This is an anonymous procedure, so it has no name
declare
  /* 
   declare local cursors, variables, and methods here.
   We don't need to have a declaration section.
  */
begin
  -- You write your logic here
  null;  -- at least one command!
exception
  when NO_DATA_FOUND then
    raise_application_error(-20000, 'No Data Found!');
end;
/   -- the forward slash says execute this procedure


set serveroutput on size 1000000 

begin
   SYS.DBMS_OUTPUT.put_line('Hi from java2s.com!'); 
end; 
/ 

第一行告诉SQL * Plus在PL / SQL过程完成后,将您的会话的数据库输出回显到屏幕。

注意,对server 10000out设置serveroutput是一个SQL * Plus命令,不是匿名块的一部分。

 

以下代码显示了最小的匿名块:


BEGIN 
    DBMS_OUTPUT.PUT_LINE(SYSDATE); 
END;