首页 > 数据库 > > Gauss 100 数据库函数介绍之其他函数Part2
语法:
DBA_SEGSIZE(size_type,table_entry)
功能:属于DBA诊断函数,用于返回普通表的大小。
说明:
该函数为诊断函数,非DBA角色的用户不能直接调用该函数。
size_type:大小类型。
0:字节数。
1:页面数。
2:EXTENTS数。
table_entry:普通表的入口entry,需要查询系统表TABLE$才能获取。
示例:
返回普通表的大小。
--预置创建普通表。 CREATE TABLE TEST(A INT, B INT);
--加入数据。 INSERT INTO TEST VALUES(1);
--查询表大小。 SELECT DBA_SEGSIZE(0, T.ENTRY) FROM GAUSSDBA.TABLE$ T WHERE T.NAME = 'TEST'; DBA_SEGSIZE(0, T.ENTRY) ----------------------- 65536 1 rows fetched.
语法:
DBA_SPACE_NAME(space_id)
功能:属于DBA诊断函数,用于返回表空间ID所在的表名。
说明:
该函数为诊断函数,用于返回表空间ID所在的表名,表空间ID不存在的时候会报错。
space_id:表空间ID。
示例:
用于返回表空间ID所在的表名。
SELECT DBA_SPACE_NAME(0); DBA_SPACE_NAME(0) ---------------------------------------------------------------- SYSTEM 1 rows fetched.
语法:
DBA_SPCSIZE(space_id,size_type_name)
功能:属于DBA诊断函数,用于返回表空间大小。
说明:
该函数为诊断函数,非DBA角色的用户不能直接调用该函数。
space_id:表空间ID。
size_type_name:大小类型。
'PAGE':每一个页面的大小,单位是字节,一般默认是8K。
'TOTAL':总字节大小。
'USED':已使用的大小。
示例:
返回表空间大小。
SELECT DBA_SPCSIZE(0,'TOTAL'); DBA_SPCSIZE(0,'TOTAL') ---------------------- 134217728 1 rows fetched.
语法:
DBA_TABTYPE(table_type_id)
功能:属于DBA诊断函数,用于返回表类型ID对应的表类型名。
说明:
该函数为诊断函数,如果表类型ID不存在,将返回UNKNOWN_TYPE。
table_type_id为表类型ID:
0:HEAP,普通表(堆表)
1:IOT,索引组织表
2:TRANS_TEMP,事务型临时表
3:SESSION_TEMP,会话型临时表
4:NOLOGGING,无日志表
5:EXTERNAL,外部表
示例:
返回表类型ID对应的表类型名。
SELECT DBA_TABTYPE(3); DBA_TABTYPE(3) ---------------------------------------------------------------- SESSION_TEMP 1 rows fetched.
语法:
DBA_USER_NAME(user_id)
功能:属于DBA诊断函数,用于返回用户ID对应的用户名。
说明:
该函数为诊断函数,如果用户ID不存在,会返回用户不存在的报错信息。
user_id为整数类型。
示例:
返回用户ID对应的用户名。
select dba_user_name(1); DBA_USER_NAME(1) ---------------------------------------------------------------- PUBLIC 1 rows fetched.
语法:
DECODE_NAME(INDEX_NAME)
功能:去除相同索引或约束的oid部分。
当设置ENABLE_IDX_CONFS_NAME_DUPL参数为TRUE时,允许不同表使用相同的索引名或约束名。使用DECODE_NAME函数可以返回不带oid的索引名称。
说明:必须开启ENABLE_IDX_CONFS_NAME_DUPL功能,否则返回索引名和约束名不变化。
示例:
返回不带oid的索引。
--删除表T_DUPL_INDEX_1。 DROP TABLE IF EXISTS T_DUPL_INDEX_1;
--创建表T_DUPL_INDEX_1。 CREATE TABLE T_DUPL_INDEX_1 ( F_INT1 INT, F_INT2 INT, F_CHAR1 CHAR(20) );
--创建索引INDEX_DUPL_INDEX。 CREATE INDEX INDEX_DUPL_INDEX ON T_DUPL_INDEX_1(F_INT1);
--创建唯一约束。 CREATE UNIQUE INDEX INDEX_CHAR_DUPL_INDEX ON T_DUPL_INDEX_1(F_CHAR1);
--删除表T_DUPL_INDEX_2。 DROP TABLE IF EXISTS T_DUPL_INDEX_2;
--创建表T_DUPL_INDEX_2。 CREATE TABLE T_DUPL_INDEX_2 ( F_INT1 INT, F_INT2 INT, F_CHAR1 CHAR(20) );
--创建索引INDEX_DUPL_INDEX。 CREATE INDEX INDEX_DUPL_INDEX ON T_DUPL_INDEX_2(F_INT1);
--创建唯一约束。 CREATE UNIQUE INDEX INDEX_CHAR_DUPL_INDEX ON T_DUPL_INDEX_2(F_CHAR1);
--查找索引名称相同的索引(带oid)和表名。 SELECT INDEX_NAME,TABLE_NAME FROM USER_INDEXES WHERE INDEX_NAME LIKE 'INDEX_DUPL_INDEX%' ORDER BY TABLE_NAME; INDEX_NAME TABLE_NAME ---------------------------------------------------------------- ---------------------------------------------------------------- INDEX_DUPL_INDEX_2079# T_DUPL_INDEX_1 INDEX_DUPL_INDEX_2080# T_DUPL_INDEX_2 2 rows fetched.
--查找索引名称相同的索引和表名使用DECODE_NAME函数,去掉索引后缀oid部分。 SELECT DECODE_NAME(INDEX_NAME), TABLE_NAME FROM USER_INDEXES WHERE INDEX_NAME LIKE 'INDEX_CHAR_DUPL_INDEX%' ORDER BY TABLE_NAME; DECODE_NAME(INDEX_NAME) TABLE_NAME ---------------------------------------------------------------- ---------------------------------------------------------------- INDEX_CHAR_DUPL_INDEX T_DUPL_INDEX_1 INDEX_CHAR_DUPL_INDEX T_DUPL_INDEX_2 2 rows fetched.
语法:
FOUND_ROWS()
功能:返回一条带有LIMIT子句的SELECT语句被执行用于筛选一部分结果的同时又想知道完整的结果集(即包含被LIMIT过滤的结果)的行数。
说明:
如果在一条未指定SQL_CALC_FOUND_ROWS的SELECT语句后调用FOUND_ROWS(),则FOUND_ROWS()返回的行数就是SELECT语句自身返回的结果集行数,将不会包含受LIMIT子句影响被过滤的行数 。
对于UNION或UNION ALL或MINUS语句,FOUND_ROWS()只对全局LIMIT子句有影响。对于各个SELECT子集中出现的LIMIT语句则不会产生影响。
如果执行FOUND_ROWS()函数之前该会话尚未执行过SELECT语句,或之前执行的SELECT语句失败了,又或之前执行的是一个更新语句,这类情况下FOUND_ROWS()函数的返回值未定义。通常情况下会返回一个“0”。
示例:
--删除表employee。 DROP TABLE IF EXISTS employee;
--创建表employee。 CREATE TABLE employee(staff_id INT NOT NULL, first_name VARCHAR(64));
--加入数据。
INSERT INTO employee(staff_id,first_name) values ('1', 'Alice');
INSERT INTO employee(staff_id,first_name) values ('2', 'Jack');
INSERT INTO employee(staff_id,first_name) values ('3', 'Brown');
--提交事务。
COMMIT;--查找staff_id > 1的人。 SELECT * FROM employee where staff_id>1; STAFF_ID FIRST_NAME ------------ ---------------------------------------------------------------- 2 Jack 3 Brown 2 rows fetched. --返回满足条件的行数。 SELECT FOUND_ROWS(); FOUND_ROWS() -------------------- 2 1 rows fetched.
该函数只在分布式场景使用,单机场景返回为空。
语法:
GET_LOCK(name_expr [, timeout_expr])
功能:GET_LOCK() 为一个会话获取一把锁名为name_expr的咨询锁(advisory lock),之后另一个会话若也调用GET_LOCK()尝试获取同名锁时,将会等待timeout_expr所指定的秒数。如果在此期间内第一个会话释放了锁,则第二个会话将能成功获取锁;如果时间超过指定的超时秒数后第一个会话仍未释放锁,则第二个会话获取锁的尝试失败。
GET_LOCK()的返回值如下:
1: 成功获取到锁。
0: 未能获取到锁。
通过GET_LOCK()获取到的锁可通过以下两种方式释放:
显式释放:通过调用RELEASE_LOCK()释放。
隐式释放:会话中断(不论正常或异常)时该会话占有的锁自动释放。
说明:
表示锁名的name_expr的计算结果的字符串长度不能超过64字节。
同一个会话同时最多可以加32把锁。
同一会话可以多次对同一个锁名上锁,这种情况下,需要对该锁名解锁同样的次数。对同一锁名多次加锁时,第二次加锁开始的次数并不计入上述所说的32把锁的个数。
timeout_expr未指定或指定为一个负值时,GET_LOCK()获取不到锁时将一直等待。
示例:
对表中某一列进行加锁。
--删除表employee。 DROP TABLE IF EXISTS employee;
--创建表employee。 CREATE TABLE employee(staff_id INT NOT NULL, first_name VARCHAR(64));
--加入数据。
INSERT INTO employee(staff_id,first_name) values ('1', 'Alice');
INSERT INTO employee(staff_id,first_name) values ('2', 'Jack');
INSERT INTO employee(staff_id,first_name) values ('3', 'Brown');
--提交事务。
COMMIT;--对'staff_id'列加锁。
SELECT GET_LOCK('staff_id',5);
GET_LOCK('STAFF_ID',5)
--------------------
1
1 rows fetched.语法:
GREATEST( expr1 [, expr2, ... expr_n] )
功能:GREATEST函数返回一个或多个表达式中的最大的值。
返回值类型与expr1的数据类型相同。
expr1:要评估的第一个表达式是否是最大的。
expr2,... expr_n可选的,要评估的其他表达式。
示例:
SELECT GREATEST(2, 5, 12, 3);
GREATEST(2, 5, 12, 3)
---------------------
12
1 rows fetched.
SELECT GREATEST('2', '5', '12', '3');
GREATEST('2', '5', '12', '3')
-----------------------------
5
1 rows fetched.
SELECT GREATEST('apples', 'oranges', 'bananas');
GREATEST('APPLES', 'ORANGES', 'BANANAS')
----------------------------------------
oranges
1 rows fetched.
SELECT GREATEST('apples', 'applis', 'applas');
GREATEST('APPLES', 'APPLIS', 'APPLAS')
--------------------------------------
applis
1 rows fetched.语法:
LAST_INSERT_ID([expr])
功能:
参数为空时:返回当前回话最后一次INSERT语句AUTO_INCREMENT列自动生成的值。
如果指定expr参数,则该函数返回参数的值,并将其记住为LAST_INSERT_ID() 返回的下一个值。
示例:
返回最后一条INSERT语句AUTO_INCREMENT列自动生成的值。
--删除表employee。 DROP TABLE IF EXISTS employee;
--创建表employee。 CREATE TABLE employee(staff_id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,first_name VARCHAR(10));
--加入数据。 INSERT INTO employee VALUES (NULL, 'Bob'); INSERT INTO employee VALUES (NULL, 'BROWN'); INSERT INTO employee VALUES (NULL, 'ALICE');
--返回最后一条INSERT语句AUTO_INCREMENT列自动生成的值。 SELECT LAST_INSERT_ID(); LAST_INSERT_ID() -------------------- 3 1 rows fetched.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3163939/ ,如需转载,请注明出处,否则将追究法律责任。