我对Oracle相当陌生,但已经进行了很好的搜索。有人能解释一下与此相关的范围规则吗:
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:忽略语句06550。00000-“第%s行第%s列:\n%s”*原因:通常是PL/SQL编译错误*行动:
为什么在我第二次尝试输出它时Variable2不可用?有没有办法在第二个BEGIN... END块中实现对Variable2的访问,或者这只是Oracle的工作方式?
我正在使用Oracle 12c。谢谢
PL/SQL块的格式为:
DECLARE
-- your variables
BEGIN
-- your statements
END;
块的声明部分是可选的(但仍然是块的一部分)
因此,您的代码是:
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块:
我认为你的缩进在愚弄你:一个块是(DECLARE部分是可选的)
DECLARE
...
BEGIN
...
END
第二个输出显然在声明Variable2的块之后。
本章介绍当模板在访问变量时发生了什么事情,还有变量是如何存储的。 当调用 Template.process 方法时,它会在方法内部创建一个 Environment 对象,在 process 返回之前一直使用。 该对象存储模板执行时的运行状态信息。除了这些,它还存储由模板中指令,如 assign, macro, local 或 global 创建的变量。 它不会尝试修改传递给 process 的数据
问题内容: 我知道变量作用域由块的开始和块的结尾包围。如果在块内声明了相同的变量,则会发生编译错误。但是,请看以下示例。 在这里,可以在方法中重新声明,尽管它已经在类中声明了。但是在块中,无法重新声明。 为什么类范围变量的重新声明不产生错误,而方法范围变量的重新声明却产生错误? 问题答案: 这是因为不是变量,而是实例字段。允许局部变量与字段具有相同的名称。为了区分变量和具有相同名称的字段,我们在实
问题内容: 我知道变量作用域由块的开始和块的结尾包围。如果在块内声明了相同的变量,则会发生编译错误。但是,请看以下示例。 在这里,可以在方法中重新声明,尽管它已经在类中声明了。但是在块中,无法重新声明。 为什么类范围变量的重新声明不产生错误,而方法范围变量的重新声明却产生错误? 问题答案: 这是因为不是变量,而是实例字段。允许局部变量与字段具有相同的名称。为了区分变量和具有相同名称的字段,我们在实
问题内容: 这将编译 这不会 我希望两者都能编译(也许这是C的工作方式?)。是什么原因导致无法在外部块中以相同的名称声明一个块中的变量? 问题答案: 简短的答案是:因为这是JLS§6.4中定义Java语言的方式。 您可能从其他语言中使用过,因此允许使用所谓的可变阴影。但是,Java语言的发明者认为这是一个笨拙的功能,他们不希望使用其语言: 此限制有助于检测其他一些非常模糊的错误。 但是,正如作者在
问题内容: 我正在使用dgrid,并且尝试在外部设置dataStore。当页面加载时,我打电话来创建网格。在网格加载时,null为null。执行查询时,将设置。 没有错误,但是网格仍然是空的。正在使用数据更新aliasStore,但是即使刷新了网格也没有将其反映在网格上。查询后如何获取反映在网格中的数据? Javascript对象 设置数据存储数据 问题答案: 您正在将“ this.Store”设
问题内容: 我正在阅读“ CreateSpace Go 2012编程入门” 在第86页上,我发现了这种邪恶的魔力 1)为什么不复位?2)正在返回,或者是否如此聪明以至于它可以与所有东西配合使用? 问题答案: 为了清楚起见,我将为这两个函数分配名称: 工厂返回闭包–函数是Go中的一等公民,即它们可以是右手表达式,例如: 在您的代码中,闭包环绕工厂的上下文,这称为 词法作用域 。这就是变量在闭包内部可