shark-系统信息函数
本章节只包含shark插件新增的系统信息函数。
会话信息函数
@@FETCH_STATUS
描述:返回最后一条游标FETCH语句的状态,该语句可以是针对连接当前打开的任何游标发出的。0表示FETCH成功,-1表示FETCH失败。
返回值类型:int
示例:
select @@FETCH_STATUS;
@@ROWCOUNT
描述:返回受上一句影响的行数。如果行数大于20亿,请使用ROWCOUNT_BIG()。
返回值类型:int
示例:
select @@ROWCOUNT;
ROWCOUNT_BIG()
描述:返回受上一句影响的行数。该函数的功能与@@ROWCOUNT类似,区别在于ROWCOUNT_BIG()的返回类型为bigint。
返回值类型:bigint
示例:
select ROWCOUNT_BIG();
@@SPID
描述:返回当前用户进程的会话ID。
返回值类型:bigint
示例:
select @@SPID;
scope_identity()
描述:返回插入到同一作用域中标识列内的最后一个标识值。
返回值类型:numeric(38, 0)
示例:
openGauss=# CREATE TABLE TZ(Z_id INT IDENTITY PRIMARY KEY, Z_name VARCHAR(20) NOT NULL); CREATE TABLE openGauss=# INSERT INTO TZ(Z_NAME) VALUES('Lisa'); INSERT 0 1 openGauss=# SELECT scope_identity(); scope_identity ---------------- 1 (1 row)
对象信息函数
object_id('[database_name.[schema_name]. | schema_name.]object_name' [, 'object_type'])
描述:返回数据库对象的oid。如果没有查询权限或者对象不存在则返回NULL。
第二个参数object_type支持以下类型
属性名称 | 说明 |
---|---|
S | 系统表 |
U | 用户表 |
V | 视图 |
SO | 序列 |
C | check约束 |
D | DEAULTA约束 |
F | FOREIGN KEY约束 |
PK | 主键约束 |
UQ | UNIQUE约束 |
AF | 聚合函数 |
FN | 函数 |
P | 存储过程 |
TR | 触发器 |
返回值类型:int
示例:
```
CREATE TABLE sys.students (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT DEFAULT 0,
grade DECIMAL(5, 2)
);
set search_path = 'sys';
select object_id('students');
object_id
-----------
16666
(1 row)
select object_id('sys.students', 'U');
object_id
-----------
16666
(1 row)
```
objectproperty(oid, property)
描述:返回插件框架中对象的对应属性结果。对象类型不符合返回NULL。
property可选范围
返回值类型:int
表1 property属性表
属性名称 | 对象类型 | 说明 |
---|---|---|
IsDefault | 任何对象 | 返回0。 |
IsDefaultCnst | 任何对象 | 是否为DEFAULT约束。1=True, 0=False |
IsDeterministic | 函数 | 返回0。 |
IsIndexed | 表、视图 | 有索引的表或视图。1=True, 0=False |
IsInlineFunction | 函数 | 内联函数。1=True, 0=False |
IsSysShipped | 任何对象 | sys框架下的对象。1=True, 0=False |
IsPrimaryKey | 任何对象 | 是否为PRIMARY KEY约束。1=True, 0=False |
IsProcedure | 任何对象 | 是否为存储过程。1=True, 0=False |
IsRule | 任何对象 | 返回0。 |
IsScalarFunction | 函数 | 是否为标量值函数。1=True, 0=False |
IsSchemaBound | 函数、视图 | 返回0。 |
IsTable | 表 | 是否为表。1=True, 0=False |
IsTableFunction | 函数 | 是否为表值函数。1=True, 0=False |
IsTrigger | 任何对象 | 是否为触发器。1=True, 0=False |
IsUserTable | 表 | 是否为用户表。1=True, 0=False |
IsView | 视图 | 是否为视图。1=True, 0=False |
OwnerId | 任何对象 | 返回对象所有者的oid。 |
ExeclsQuotedIdentOn | 函数、存储过程、触发器、视图 | 返回1。 |
ExeclsIsAnsiNullsOn | 函数、存储过程、触发器、视图 | 返回1。 |
TableFulltextPopulateStatus | 表 | 返回0。 |
TableHasVarDecimalStorageFormat | 表 | 返回0。 |
示例:
其中database为当前数据库
```
CREATE TABLE sys.students (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT DEFAULT 0,
grade DECIMAL(5, 2)
);
set search_path = 'sys';
select objectproperty(object_id('students'), 'ownerid') as ownerid;
ownerid
---------
10
(1 row)
select objectproperty(object_id('sys.students'), 'istable') as ownerid;
ownerid
---------
1
(1 row)
select objectproperty(object_id('database.sys.students'), 'isview') as ownerid;
ownerid
---------
0
(1 row)
```
databasepropertyex(database, property)
描述:对于指定的数据库,此函数返回指定数据库选项或属性的当前设置。
参数类型:
database
数据类型为nvarchar(128),用于指定databasepropertyex
要返回其命名属性信息的数据库的名称。property
数据类型为varchar(128),用于指定要返回的数据库属性名称。
返回值类型:sql_variant
表2:property属性表
属性名称 字段说明 返回值 Collation 数据库默认字符序 返回pg_database中查询数据库的datcollate属性值 ComparisonStyle 字符序规则的Windows比较样式 返回0 Edition 数据库版本或者服务层级 返回Standard IsAnsiNullsEnabled 所有和null的比较值被作为unknown openGauss中为会话级别参数,默认返回为1 IsAnsiPaddingEnabled 在比较或者插入前,字符串将被填充到相同长度 返回0 IsAnsiWarningsEnabled 发生标准错误条件时,SQL Server会发出错误消息或者警告消息,如果当聚合函数中出现Null值,会发出错误和警告 返回0 IsArithmeticAbortEnabled 如果执行查询时发生溢出或被零除错误,将结束查询 返回0 IsAutoClose 在最后一个用户退出后,数据库完全关闭并释放资源 返回0 IsAutoCreateStatistics 查询优化器根据需要创建单列统计信息以提高查询性能 openGauss中默认为1,返回1 IsAutoCreateStatisticsIncremental 条件允许时,创建的单列统计信息递增 返回0 IsAutoShrink 数据库文件定期收缩 返回0 IsAutoUpdateStatistics 查询优化器会自动更新潜在的过期统计信息 返回0 IsClone 数据库是使用DBCC CLONEDATABASE创建的一个用户的数据库的schema-only和statistic-only的副本 返回0 IsCloseCursorsOnCommitEnabled 事务提交后,会关闭所有打开的游标 返回0 IsDatabaseSuspendedForSnapshotBackup 数据库已挂起 返回0 IsFulltextEnabled 支持对数据库进行全文和语义检索 返回0 IsInStandBy 数据库以只读方式联机,同时支持恢复日志 1为true,0为false IsLocalCursorsDefault 游标声明默认为LOCAL 返回0 IsMemoryOptimizedElevateToSnapshotEnabled 事务隔离级别设置为读提交,读未提交及其以下隔离级别时,使用SNAPSHOT隔离访问内存优化表 返回0 IsMergePublished 如果安装了复制(备份),允许SQL Server支持数据库表发布用来合并复制(备份) 返回0 IsNullConcat Null拼接操作产生Null 返回0 IsNumericRoundAbortEnabled 表达式中精度缺失将产生错误 返回0 IsParameterizationForced 参数化数据库是否设置为FORCED 返回0 IsQuotedIdentifersEnabled 允许使用双引号 返回0 IsPublished 如果安装了复制,SQL Server支持发布数据库表供快照复制或者事务复制使用 返回0 IsRecursiveTriggersEnable 递归触发器启用 返回0 IsSubscribed 数据库订阅以发布 返回0 IsSyncWithBackup 数据库为发布数据库或分布式数据库,并且支持在不中断事务复制的情况下还原 返回0 IsTornPageDetectionEnabled SQL Server检测断电或者其他系统故障导致的不完全I/O操作 1为true,0为false IsVerifiedClone 数据库是使用DBCC CLONEDATABASE的WITH VERIFY_CLONEDB选项创建的schema-only和statistics-only的用户数据库复制 返回0 IsXTPSupported 数据库是否支持XTP 返回0 LastGoodCheckDbTime 指定数据库上最后一次成功的DBCC CHECKDB日期和时间 返回NULL LCID 排序规则的Windows区域设置标识符 返回0 MaxSizeInBytes 最大数据库大小(字节单位) 返回0 Recovery 数据库恢复模式 返回NULL ServiceObjective 描述SQL数据库或Azure Synapse Analytics中的数据库性能级别 返回NULL ServiceObjectiveId SQL数据库中的服务目标ID 返回0 SQLSortOrder SQL Server早期版本中支持的SQL Server排序ID 返回0 Status 数据库状态 返回ONLINE Updateability 显示是否可以修改数据 1为true,0为false UserAccess 显示哪些用户可以访问数据库 返回NULL Version 用于创建数据库的SQL Server代码的内部版本号 返回openGauss版本序号 ReplicaID 已连接的超大规模数据库/副本的副本ID 返回NULL 示例:
openGauss=# SELECT databasepropertyex('existDB','Collation') AS Collation; collation ------------- zh_CN.UTF-8 (1 row)
suser_name([server_user_id])
描述:返回用户的登录表示名
参数类型:
server_user_id
数据类型为oid,用于指定suser_name
要返回的用户的登录标识名对应的oid,当用户不输入任何用户oid时,该函数会默认返回当前用户的登陆标识名,如果输入为NULL,该函数返回NULL。
返回值类型:nvarchar(128)
示例:
openGauss=# SELECT suser_name(10) AS suser_name; suser_name ------------ user_name (1 row)
suser_sname([server_user_sid])
描述:返回用户的登录表示名
参数类型:
server_user_sid
数据类型为varbinary(85),用于指定suser_sname
要返回的用户的登录标识名对应的oid,该函数目前等同于suser_name
。
返回值类型:nvarchar(128)
示例:
openGauss=# SELECT suser_sname(10::varbinary) AS suser_sname; suser_sname ------------- user_name (1 row)
@@PROCID
描述:返回当前模块的oid。模块可以是存储过程、用户自定义函数或触发器。
返回值类型:oid
示例:
-- 创建存储过程,调用@@PROCID openGauss=# CREATE PROCEDURE test_procid openGauss-# AS openGauss$# DECLARE openGauss$# ProcID integer; openGauss$# BEGIN openGauss$# ProcID = @@PROCID; openGauss$# RAISE INFO 'Stored procedure %', ProcID; openGauss$# END; openGauss$# / CREATE PROCEDURE -- 调用存储过程 openGauss=# SELECT test_procid(); INFO: Stored procedure 49675 test_procid ------------- (1 row)