在Java中,您可以执行以下操作以在方法中本地范围变量:
public void blah() {
{
int a = 1;
int b = 2;
}
{
int a = 3;
int b = 4;
}
}
我甚至不知道这种技术的名称是什么,我只需要使用一次或两次。在我目前的情况下,这可能会对这个SQL项目派上用场。
这在SQL中是否可行?
我正在使用MS SQL Server ... 为了给出更多情况:
我们将几个sql脚本存储为文件,以帮助对数据库执行各种操作。这些脚本相当大,旨在独立运行。有时,我们需要将这些脚本中的几个一起运行并在单个文件中传递。
由于这些脚本中的大多数都有公共变量,因此在将这些脚本连接在一起时会遇到冲突。当然,很容易将所有变量声明移动到文件的开头,但目标是让这个过程自动化。
答案 0 :(得分:0)
在MySQL中,变量声明必须出现在子程序/存储过程的开头,就像C函数的变量一样。
答案 1 :(得分:0)
尝试编译您提供的Java代码示例(包含在class helo
中)##标题##产生:
$ javac helo.java
helo.java:7: a is already defined in blah()
int a = 3;
^
helo.java:8: b is already defined in blah()
int b = 4;
^
2 errors
所以,不,你不能在Java中这样做(C,是的; C ++,是的; Java,不)。
SQL本身没有词法作用域,虽然嵌入在关系数据库中的一些存储过程方言肯定可能(但很难帮助不知道确切的方言)。在SQL中,您使用tablename.
前缀限定其他同名字段。
答案 2 :(得分:0)
在SQL Server中,不能以块为单位。只要DECLARE在SET之前就可以了。 DECLARE不必是批处理或代码的开头
BEGIN
DECLARE @a int
END
BEGIN
SET @a = 1
END
IIRC,这同样适用于Sybase。
答案 3 :(得分:0)
SQL是一种声明性语言(即关注'什么是'而不是'怎么')。因此,它的定义(ansi)不包含程序和块。
大多数供应商实现通过嵌入他们自己的过程语言填充这个空白 - 在Microsoft的情况下为TSQL,在Oracle的情况下为PL / SQL等(不确定Mysql和SQLlite等) - 甚至他们也没有进行确切的功能匹配使用Java(无匿名代码块)。
每个SQL操作都在一个集合上运行,并返回一个集合。
因此“mytable”是一个集合,“select from mytable”是一个集合,而“select from(select from mytable)”是一个集合。
所以它不可能深入到较低的粒度级别,也许“列”或伪列是'变量'
Oracle定义了一个“从双重选择”操作来保证'循环'为1(即一个只返回1行的select语句)