通常,变量在DECLARE
部分中声明,并且在BEGIN
块内可用。我发现这种风格既僵硬又乏味。
是否可以在需要时在BEGIN
块中声明 块中的变量?如果只需要为进一步的计算,查询和断言存储一些临时值,那么声明新的全局变量是愚蠢的。
答案 0 :(得分:2)
试试这个 - 我在代码中添加了注释,以便您了解每个变量的可见性域。您还可以从最后一个DBMS_OUTPUT中删除注释,以查看外部代码中的var2不再可用。
set serveroutput on;
<<tag>>
DECLARE
var1 INT := 1; -- global variable
BEGIN
DECLARE
var1 INT := 2; -- local variable
var2 INT := 0;
BEGIN
DBMS_OUTPUT.PUT_LINE(var1); -- will display 2 (value of local var1);
DBMS_OUTPUT.PUT_LINE(tag.var1); -- will display 1 (value of global var1);
DBMS_OUTPUT.PUT_LINE(var2); -- will display 0 (value of local var2);
END;
DBMS_OUTPUT.PUT_LINE(var1); -- will display 1 (value of global var1);
-- DBMS_OUTPUT.PUT_LINE(var2); -- will crash since var2 is no longer in memory;
END;
答案 1 :(得分:-1)
所有语言都有自己的功能。这只是工具。 您可能应该将代码划分为小块(过程,函数)吗?如果您的代码放在20-30行中,那么声明变量就不会有问题。从较小的块中,您可以构建更大且可重用的代码。
此致