块结构

PLOSCAR过程的定义至少包含一个块结构。块结构可以嵌套,其语法如下:

语法:

pl_block_define ::=

pl_block ::=

declare_section ::=

proc_section ::=

proc_stmt ::=

参数:

decl_statement 变量声明语句,详见 变量和常量

pl_statement PLOSCAR语句,详见 PLOSCAR语句

label_name 块名

说明:

一个块由声明段declare_section和定义段proc_section(用关键字BEGIN和END包围)组成。声明段包含一组变量声明语句,这些变量可以在该块以及子块中使用。声明段开头可以指定块名。定义段包含一组PLOSCAR语句或块结构。

示例:块结构

--  清理环境
DROP PROCEDURE proc;

create or replace procedure proc as
<<BLOCK1>>
DECLARE
    var1 int default 0;
BEGIN
    var1 := var1+1;
    dbms_output.put_line('var1 = ' || var1);
    <<BLOCK2>>
    DECLARE
        var1 int default 3;
    BEGIN
        dbms_output.put_line( 'var1 = ' || var1);
        var1 := var1+1;
        dbms_output.put_line( 'var1 = ' || var1);
    END;
    
    dbms_output.put_line( 'var1 = ' || var1);
END;

/
exec proc;
var1 = 1
var1 = 3
var1 = 4
var1 = 1

--  删除
DROP PROCEDURE proc;

这个例子包含两个结构块BLOCK1和BLOCK2,BLOCK2是BLOCK1的子块。

在两个块中,都定义了var1这个变量,从以上的例子中可以看出,变量的有效范围是跟定义它的块结构紧密结合的。

因此,在BLOCK2中的var1先后等于3和4,而BLOCK1中var1并没有改变,虽然他们的名字是一样。