Oracle变量范围
我对甲骨文还不太熟悉,但已经进行了很好的搜索。有人能解释与此相关的范围规则吗:Oracle变量范围,oracle,plsql,scope,oracle12c,Oracle,Plsql,Scope,Oracle12c,我对甲骨文还不太熟悉,但已经进行了很好的搜索。有人能解释与此相关的范围规则吗: BEGIN DECLARE Variable1 number := 1; BEGIN DECLARE Variable2 number := 2; BEGIN dbms_output.put_line('Variable1: ' || Variable1); dbms_outp
BEGIN
DECLARE
Variable1 number := 1;
BEGIN
DECLARE
Variable2 number := 2;
BEGIN
dbms_output.put_line('Variable1: ' || Variable1);
dbms_output.put_line('Variable2: ' || Variable2);
END;
BEGIN
dbms_output.put_line('Variable1: ' || Variable1);
dbms_output.put_line('Variable2: ' || Variable2);
END;
END;
END;
错误与:
错误报告-ORA-06550:第17行第55列:PLS-00201:标识符
“VARIABLE2”必须声明为ORA-06550:第17行第17列:PL/SQL:
忽略语句
655000000-“行%s,列%s:\n%s”
*原因:通常是PL/SQL编译错误。
*行动:
为什么Variable2在我第二次尝试输出时不可用?是否有一种方法可以在第二个BEGIN…END块中访问Variable2,或者这就是Oracle的工作方式
我正在使用Oracle 12c。谢谢 我认为你的缩进是在愚弄你: 块是(声明部分是可选的)
第二个输出明显位于声明Variable2的块之后。我认为您的缩进在愚弄您: 块是(声明部分是可选的)
第二个输出明显位于声明Variable2的块之后。PL/SQL块的格式为:
DECLARE
-- your variables
BEGIN
-- your statements
END;
块的DECLARE
部分是可选的(但仍然是块的一部分)
因此,您的代码是:
BEGIN -- Block 1 Start
DECLARE -- Block 1.1 Start
Variable1 number := 1;
BEGIN
DECLARE -- Block 1.1.1 Start
Variable2 number := 2;
BEGIN
NULL;
END; -- Block 1.1.1 End
BEGIN -- Block 1.1.2 Start
NULL;
END; -- Block 1.1.2 End
END; -- Block 1.1 End
END; -- Block 1 End
您有4个PL/SQL块:
- 块1没有局部变量
- 块1.1嵌套在块1内,并声明局部变量
variable1
- 块1.1.1嵌套在块1.1内(嵌套在块1内),并声明变量
,可以访问其周围块的范围,以便查看variable2
variable1
- 块1.1.2嵌套在块1.1内(嵌套在块1内),没有局部变量,但可以访问其周围块的范围,因此可以查看
variable1
不在祖先的作用域中,但在同级中且不可见variable2
DECLARE
-- your variables
BEGIN
-- your statements
END;
块的DECLARE
部分是可选的(但仍然是块的一部分)
因此,您的代码是:
BEGIN -- Block 1 Start
DECLARE -- Block 1.1 Start
Variable1 number := 1;
BEGIN
DECLARE -- Block 1.1.1 Start
Variable2 number := 2;
BEGIN
NULL;
END; -- Block 1.1.1 End
BEGIN -- Block 1.1.2 Start
NULL;
END; -- Block 1.1.2 End
END; -- Block 1.1 End
END; -- Block 1 End
您有4个PL/SQL块:
- 块1没有局部变量
- 块1.1嵌套在块1内,并声明局部变量
variable1
- 块1.1.1嵌套在块1.1内(嵌套在块1内),并声明变量
,可以访问其周围块的范围,以便查看variable2
variable1
- 块1.1.2嵌套在块1.1内(嵌套在块1内),没有局部变量,但可以访问其周围块的范围,因此可以查看
variable1
不在祖先的作用域中,但在同级中且不可见variable2