块结构¶
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并没有改变,虽然他们的名字是一样。