VastbaseG100

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

Menu

@@全局函数

背景信息

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)