@变量
功能描述
Vastbase在SQLServer兼容模式下支持@var_name
,用于临时存储一个带格式的值,可以查询值,也可以直接使用。
注意事项
该功能仅在数据库兼容模式为SQLServer时能够使用(即创建DB时DBCOMPATIBILITY='MSSQL'),在其他数据库兼容模式下不能使用该特性。
使用该功能需要开始GUC参数enable_set_variable_mssql_format。
不支持游标类型、表类型和自定义类型。
该功能仅在过程体或者明确定义的BEGIN END匿名块内有效。
当变量已经被赋值,此时如果使用
SELECT @var_name = expression
,expression的值来自表的字段引用且无返回值则保持原值。当变量已经被赋值,此时如果使用
SELECT @var_name = expression
,expression的值来自子查询且无返回值则置为NULL。
语法格式
定义语法
DECLARE @var_name [AS] typename := expr [,...]
赋值语法
@var_name={value | expr}
参数说明
var_name
变量名称。
typename
数据类型。
取值范围:Vastbase支持的数据类型,SQLServer兼容模式下的数据类型,不包括text、ntext、image。
AS
可选关键字。
value
变量赋值。值类型选为常量或表达式,该值类型必须于变量类型匹配,如不匹配则会进行隐式转换,无法转换会抛出错误。
expr
任意有效的表达式。
示例
前置步骤
1、创建兼容模式为SQL Server的库db_sqlserver,并进入。
CREATE DATABASE db_sqlserver DBCOMPATIBILITY='MSSQL';
\c db_sqlserver
2、设置GUC参数。
set enable_set_variable_mssql_format=on;
示例1: 使用declare给变量赋值。
1、使用declare给变量赋值。
declare @b_1140655 int=3+8;
2、查询变量内容。
select @b_1140655;
返回结果为:
@b_1140655
------------
11
(1 row)
示例2: 在insert语句中使用@变量。
1、创建测试表。
create table tab1_1140770(id int,a1 varchar(8));
create table tab2_1140770(id int,a1 varchar(8));
create table tab3_1140770(id int,a1 varchar(8));
create table tab4_1140770(id int,a1 varchar(8));
2、声明变量。
declare @a_1140770 int=1;
declare @b_1140770 varchar(8)='a';
3、执行insert语句。
insert all
into tab1_1140770 values(@a_1140770,@b_1140770 || 1)
into tab2_1140770 values(@a_1140770*2,@b_1140770 || 2)
into tab3_1140770 values(@a_1140770*3,@b_1140770 || 3)
into tab4_1140770 values(@a_1140770*4,@b_1140770 || 4)
select 1 from dual;
4、执行select语句查询表中数据。
select * from tab1_1140770 order by id;
select * from tab2_1140770 order by id;
select * from tab3_1140770 order by id;
select * from tab4_1140770 order by id;
返回结果依次为:
id | a1
----+----
1 | a1
(1 row)
id | a1
----+----
2 | a2
(1 row)
id | a1
----+----
3 | a3
(1 row)
id | a1
----+----
4 | a4
(1 row)