VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

@变量

功能描述

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)