@@变量
功能描述
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;