VastbaseG100

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

Menu

@@变量

功能描述

Vastbase在SQLServer兼容模式下支持@@变量名称,其在SQLServer定义中为一个全局变量,但是不具备变量特性,实质上是一个系统函数。Vastbase G100 V2.2 Build13版本实现了如下变量:

  • @@ROWCOUNT:返回受上一个语句影响的小于20亿的行数。有以下四种情况:

    • 将@@ROWCOUNT置为受影响或被读取的行的数目。
    • 保留前一个语句执行中的@@ROWCOUNT,例如EXECUTE语句。
    • 将@@ROWCOUNT置为0,如BEGIN TRANSACTION,COMMIT。
    • 将@@ROWCOUNT置为1,在变量赋值,SELECT expression场景体现,如SET @local_variable,select getdate() select 'Generic Text'
  • @@fetch_status:返回上一个游标fetch状态,0为成功取得,非0为未成功。

  • @@TRANCOUNT:返回在当前连接上执行的活动事务数。

    Vastbase支持0和1两种状态:

    • 0表示当前没有活动的事务。
    • 1表示当前有活动的事务。
  • @@DBTS:返回数据库使用的最后一个时间的时间戳。

    当前Vastbase数据库中时间类型与SQLServer不一致,因此@@DBTS变量返回默认值\x307830303030303030303030303030374430。

  • @@CONNECTIONS:返回数据库当前连接数。

  • @@VERSION:返回当前数据库安装版本。

  • @@LANGUAGE:返回当前数据库语言信息。

    当前Vastbase数据库不支持设定language选项,当前数据库中language指plpgsql这类语言信息,而非SQLServer中指代的自然语音,因此@@LANGUAGE变量返回默认值null。

注意事项

  • 该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。

  • @@ROWCOUNT,@@FETCH_STATUS仅在SQLServer兼容性下的plpgsql过程中使用。

  • 使用该功能需要开启GUC参数enable_set_variable_mssql_format

示例

前置步骤

开启GUC参数。

set enable_set_variable_mssql_format=on;

示例1: 在存储过程中使用@@ROWCOUNT,执行表中数据的增删改查。

1、创建测试表并插入数据。

create table tb1_1144445(id int,name varchar);
insert into tb1_1144445 values(1,'lili');
insert into tb1_1144445 values(2,'lili'),(3,'luo+');
insert into tb1_1144445 values(4,'mm'),(5,'cici'); 

2、创建存储过程,设置参数。

create or replace procedure proc_1144445()
as
begin
perform * from tb1_1144445;
raise info 'count:%',@@ROWCOUNT;
update tb1_1144445 set id=id*100 where name ='cici';
raise info 'count:%',@@ROWCOUNT;
update tb1_1144445 set id=id*100 where name ='lili';
raise info 'count:%',@@ROWCOUNT;
update tb1_1144445 set id=id*100 where name ='a';
if @@ROWCOUNT then
raise info 'count:%',@@ROWCOUNT;
else
raise info 'nonono';
end if;
delete from tb1_1144445 where id=4;
raise info 'count:%',@@ROWCOUNT;
delete from tb1_1144445 where name ='lili';
raise info 'count:%',@@ROWCOUNT;
delete from tb1_1144445 where id=5;
raise info 'count:%',@@ROWCOUNT;
end ;
/

3、调用存储过程。

call proc_1144445();

返回结果为:

INFO: count:5
INFO: count:1
INFO: count:2
INFO: nonono
INFO: count:1
INFO: count:2
INFO: count:0
 proc_1144445
--------------

(1 row)

4、查询表数据。

select * from tb1_1144445; 

返回结果为:

 id  | name
-----+------
   3 | luo+
 500 | cici
(2 rows)

示例2: 在事务中使用@@TRANCOUNT/@@DBTS/@@LANGUAGE。

1、开始事务。

start transaction;

2、使用变量@@TRANCOUNT/@@DBTS/@@LANGUAGE。

select @@TRANCOUNT,@@DBTS,@@LANGUAGE;

返回结果为:

 mssql_trancount |               mssql_dbts               | mssql_language
-----------------+----------------------------------------+----------------
               1 | \x307830303030303030303030303030374430 |
(1 row)

3、结束事务。

end;