@@全局函数
背景信息
Vastbase在SQL Server兼容模式下支持使用@@全局函数。各全局函数的用法介绍详见Vastbase全局函数。
这些全局函数是在系统中预先定义好的。大部分全局函数可直接在SQL语句中使用,或在PL/pgSQL中被形如以下写法的语句调用:
raise notice ' % ', @@FUNC;
上述语句等效于:
var_name := @@FUNC;
raise notice ' % ', var_name;
- @@FUNC
全局函数的名称。
- var_name
变量名。可以将全局函数@@FUNC的值赋给变量var_name在PL/pgSQL程序中进行使用。
注意事项
该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。
使用@@全局函数前必须开启参数enable_set_variable_mssql_format,表示允许数据库在SQL Server兼容模式下使用自定义用户变量的功能。
Vastbase全局函数
@@IDENTITY
功能描述
返回当前作用域中的标识列内的最后一个标识值。作用域范围包括:存储过程、触发器、函数或批处理。
- 表中具有IDENTITY属性的字段即为标识列。
- 一个表最多只能有一个IDENTITY标识列。
- IDENTITY标识列的字段值是自动生成的,不能手动插入。
@@IDENTITY
仅返回当前作用域内的最后一个标识列值:
- 如果多个行被插入,只有最后插入行的标识列的值被返回。
- 如果语句未影响任何包含标识列的表,则函数返回NULL。
- 若语句或事务执行失败,标识值不会恢复为以前的设置。
注意事项
@@IDENTITY
仅支持在PL/pgSQL中使用。
语法格式
@@IDENTITY
返回类型
numeric(38,0)
示例
1、设置参数enable_set_variable_mssql_format的值为on。
set enable_set_variable_mssql_format = on;
2、创建带有IDENTITY列的表,并插入数据以更新标识值。
create table t_identity(id int identity, col text);
insert into t_identity(col) values('张三');
insert into t_identity(col) values('李四');
3、创建包含@@identity
函数的存储过程。
create or replace procedure proc_test()
as
declare
begin
insert into t_identity(col) values('王五');
raise info '%',@@identity;
end;
/
4、调用存储过程。
call proc_test();
返回结果如下:
INFO: 3
proc_test
-----------
(1 row)
@@LANGID
功能描述
返回当前正在使用的语言的本地语言标识符 (ID)。
当前Vastbase仅支持识别以下语言:
国家/地区 | 语言代码 | ID |
---|---|---|
简体中文(中国) | zh_CN | 30 |
繁体中文(中国台湾) | zh_TW | 28 |
英语(美国) | en_US | 0 |
语法格式
@@LANGID
返回类型
smallint
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、为数据库设置不同的语言环境并调用@@LANGID
查看本地语言标识符。
参数lc_messages用于设置信息显示的语言。其可接受的值是与系统相关的。在一些系统上,这个区域范畴并不存在,不过仍然允许设置这个变量,只是不会有任何效果。例如本示例中设置语言为繁体中文时,
@@LANGID
能够按照预期返回语言标识符ID,但用户看到的仍为英文信息。
设置当前语言为简体中文,并查看当前使用的语言的本地语言标识符。
set lc_messages='zh_CN.UTF8'; select @@LANGID;
返回结果如下:
mssql_langid -------------- 30 (1 row)
设置当前语言为繁体中文,并查看当前使用的语言的本地语言标识符。
set lc_messages='zh_TW.UTF8'; select @@LANGID;
返回结果如下:
mssql_langid -------------- 28 (1 row)
设置当前语言为英语,并查看当前使用的语言的本地语言标识符。
set lc_messages='en_US.UTF8'; select @@LANGID;
返回结果如下:
mssql_langid -------------- 0 (1 row)
@@NESTLEVEL
功能描述
返回在本地服务器上执行的当前存储过程(或者自定义函数)的嵌套级别,初始值为 0。
每当一个存储过程调用另一个存储过程时,嵌套级别都会进行递增。
注意事项
Vastbase对嵌套的最大层数无限制。
语法格式
@@NESTLEVEL
返回类型
intetger
示例
示例1: 嵌套调用存储过程。
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、创建五层嵌套的存储过程。
create or replace procedure proc1_1159477(a out int)
as
begin
select @@NESTLEVEL into a;
end ;
/
create or replace procedure proc2_1159477(a out int)
as
begin
select proc1_1159477 into a;
end ;
/
create or replace procedure proc3_1159477(a out int)
as
begin
select proc2_1159477 into a;
end ;
/
create or replace procedure proc4_1159477(a out int)
as
begin
select proc3_1159477 into a;
end ;
/
create or replace procedure proc5_1159477(a out int)
as
begin
select proc4_1159477 into a;
end ;
/
3、调用存储过程,查看当前嵌套层数。
查看三层嵌套的存储过程proc3_1159477。
select proc3_1159477;
返回结果如下:
proc3_1159477 --------------- 3 (1 row)
查看四层嵌套的存储过程proc4_1159477。
select proc4_1159477;
返回结果如下:
proc4_1159477 --------------- 4 (1 row)
查看五层嵌套的存储过程proc5_1159477。
select proc5_1159477;
返回结果如下:
proc5_1159477 --------------- 5 (1 row)
示例2: 在匿名块中调用@@NESTLEVEL
函数。
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、在匿名块中调用@@NESTLEVEL。
declare
col1 int;
begin
col1:=@@NESTLEVEL;
raise notice '返回值是:%',col1;
end ;
/
嵌套层数为1,返回结果如下:
NOTICE: 返回值是:1
ANONYMOUS BLOCK EXECUTE
@@REMSERVER
功能描述
返回远程Vastbase数据库服务器在登录记录中显示的名称。
此函数仅做兼容性支持,不实现其功能,@@REMSERVER
返回值恒为NULL。
语法格式
@@REMSERVER
返回类型
nvarchar(128)
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、调用@@REMSERVER
。
select @@REMSERVER;
返回结果如下:
mssql_remserver
-----------------
NULL
(1 row)
@@SERVERNAME
功能描述
返回当前Vastbase数据库服务器的名称(hostname)。
语法格式
@@SERVERNAME
返回类型
nvarchar
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、调用@@SERVERNAME
。
select @@SERVERNAME;
返回结果如下:
mssql_servername
-----------------------
localhost.localdomain
(1 row)
@@SERVICENAME
功能描述
返回Vastbase正在其下运行的注册表项的名称。
此函数仅做兼容性支持,不实现其功能,@@SERVICENAME
返回值恒为MSSQLSERVER。
语法格式
@@SERVICENAME
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、调用@@SERVICENAME
。
select @@SERVICENAME;
返回结果如下:
mssql_servicename
-------------------
MSSQLSERVER
(1 row)
@@TEXTSIZE
功能描述
此函数仅做兼容性支持,不实现其功能,@@TEXTSIZE
返回值恒为-1
。
语法格式
@@TEXTSIZE
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、调用@@TEXTSIZE
。
select @@TEXTSIZE;
返回结果如下:
mssql_textsize
----------------
-1
(1 row)
@@LOCK_TIMEOUT
功能描述
@@LOCK_TIMEOUT
返回当前会话的当前锁定超时时间(毫秒),返回lockwait_timeout设置的值。
语法格式
@@LOCK_TIMEOUT
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、设置当前会话超时时间为1200000ms。
set lockwait_timeout=1200000;
3、查看@@LOCK_TIMEOUT
。
select @@LOCK_TIMEOUT;
返回结果如下:
mssql_lock_timeout
--------------------
1200000
(1 row)
@@CURSOR_ROWS
功能描述
它返回在连接上打开的上一个游标中当前拥有的限定行的数目。
返回值 | 描述 |
---|---|
-1 | 游标为动态游标。 因为动态游标可反映所有更改,所以游标符合条件的行数不断变化。 游标不一定检索所有符合条件的行。 |
0 | 没有已打开的游标,对于上一个打开的游标没有符合条件的行,或上一个打开的游标已被关闭或被释放。 |
n | 游标已完全填充。 返回值 (n) 是游标中的总行数。 |
语法格式
@@CURSOR_ROWS
返回类型
integer
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、创建测试表。
create table tb1_1159601(id int);
insert into tb1_1159601 values(1),(2),(3),(5),(7),(9);
3、在匿名块中调用@@CURSOR_ROWS
。
declare
CURSOR cur IS
SELECT id FROM tb1_1159601;
col1 int;
begin
open cur;
col1:=@@CURSOR_ROWS;
raise notice 'CURSOR_ROWS是:%',col1;
close cur;
end ;
/
返回结果如下:
NOTICE: CURSOR_ROWS是:6
ANONYMOUS BLOCK EXECUTE
@@SPID
功能描述
返回当前用户进程的会话 ID。
其返回结果的计算公式为(pg_catalog.pg_current_sessid()%32767)::SMALLINT
。
语法格式
@@SPID
返回类型
smallint
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、直接调用@@SPID
。
SELECT @@SPID;
以下返回结果表示当前会话ID为16923:
mssql_spid
------------
16923
(1 row)
@@CONNECTIONS
功能描述
返回Vastbase自上次启动以来尝试的连接数,无论连接是成功还是失败。
注意事项
此函数的返回值可以大于当前设置的数据库连接的最大并发连接数max_connections。
语法格式
@@CONNECTIONS
返回类型
integer
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、调用@@CONNECTIONS
以返回Vastbase自上次启动以来尝试的连接数。
select @@CONNECTIONS;
返回结果如下:
mssql_connections
-------------------
11
(1 row)
@@MAX_CONNECTIONS
功能描述
返回当前数据库允许的最大数据库并发连接数,返回结果等于GUC参数max_connections设置的值。
语法格式
@@MAX_CONNECTIONS
返回类型
integer
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、调用函数@@MAX_CONNECTIONS
以返回当前数据库允许的最大数据库并发连接数。
select @@MAX_CONNECTIONS;
以下返回结果表示当前设置的最大并发连接数为200:
mssql_max_connections
-----------------------
200
(1 row)
上述语句等效于:
show max_connections;
返回结果如下:
max_connections
-----------------
200
(1 row)
@@MAX_PRECISION
功能描述
按照服务器中的当前设置,返回 decimal 和 numeric 数据类型所用的精度级别。
默认情况下,最大精度返回 38。
语法格式
@@MAX_PRECISION
返回类型
tinyint
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、调用@@MAX_PRECISION
函数。
SELECT @@MAX_PRECISION;
返回结果如下:
mssql_max_precision
---------------------
38
(1 row)
@@OPTIONS
功能描述
此函数仅做兼容性支持,不实现其功能,@@OPTIONS返回值恒为5432
。
语法格式
@@OPTIONS
返回类型
integer
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、调用@@OPTIONS
函数。
SELECT @@OPTIONS;
返回结果如下:
mssql_options
---------------
5432
(1 row)
@@DATEFIRST
功能描述
返回当前语言环境下一周的第一天。
此函数仅做兼容性支持,不实现其功能,@@DATEFIRST
返回值恒为7
(星期日)。
语法格式
@@DATEFIRST
返回类型
tinyint
示例
1、设置参数enable_set_variable_mssql_format为on。
set enable_set_variable_mssql_format=on;
2、调用@@DATEFIRST
函数。
select @@DATEFIRST;
返回结果如下:
mssql_datefirst
-----------------
7
(1 row)