Oracle,如何在可执行块内声明局部变量

时间:2017-04-08 06:34:20

标签: oracle plsql

通常,变量在DECLARE部分中声明,并且在BEGIN块内可用。我发现这种风格既僵硬又乏味。

是否可以在需要时在BEGIN块中声明 块中的变量?如果只需要为进一步的计算,查询和断言存储一些临时值,那么声明新的全局变量是愚蠢的。

2 个答案:

答案 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行中,那么声明变量就不会有问题。从较小的块中,您可以构建更大且可重用的代码。

此致