首页 > 数据库 > > Gauss 100 数据库函数介绍之其他函数Part3
语法:
LEAST( expr1 [, expr2, ... expr_n] )
功能:LEAST函数返回一个或多个表达式中的最小的值。
返回值类型与expr1的数据类型相同。
expr1要评估的第一个表达式是否是最小的。
expr2,... expr_n可选的。要评估的其他表达式。
示例1:
SELECT LEAST(2, 5, 12, 3); LEAST(2, 5, 12, 3) ------------------ 2 1 rows fetched.
示例2:
SELECT LEAST('apples', 'oranges', 'bananas');
LEAST('APPLES', 'ORANGES', 'BANANAS')
-------------------------------------
apples
1 rows fetched.示例3:
SELECT LEAST('apples', 'applis', 'applas');
LEAST('APPLES', 'APPLIS', 'APPLAS')
-----------------------------------
applas
1 rows fetched.语法:
OBJECT_ID(expr[, object_type [, object_owner]])
功能:根据用户指定的数据库对象名(第一参数),数据库对象种类以及对象的owner返回视图USER_OBJECTS中满足指定条件的数据库对象的OBJECT_ID,若owner没有指定,该函数会根据当前会话的用户名作为owner进行查找。若根据参数指定的条件没有找到条件符合的数据库对象,则该函数返回NULL。
说明:
当前版本中可以指定筛选的数据库对象包括以下范围:
TABLE(默认值)
VIEW
DYNAMIC VIEW
PROCEDURE
TRIGGER
FUNCTION
另外,由于Gauss100 中的数据库对象没有完全的全局唯一标识,因此返回的OBJECT_ID并不能保证全局唯一。只能保证在所指定的同一数据库对象类型中唯一。
示例:
创建一个表,查找表的OBJECT_ID。
--删除表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;--查找表employee的OBJECT_ID。
SELECT OBJECT_ID('employee','TABLE');
OBJECT_ID('EMPLOYEE','TABLE')
-----------------------------
2070
1 rows fetched.语法:
RELEASE_LOCK(name_expr)
功能:通过锁名释放会话先前使用GET_LOCK()函数上的锁。
RELEASE_LOCK()的返回值如下:
1: 成功获取所指定的锁。
NULL: 当前会话并不占有所指定的锁。
示例:
对表中的某一列加锁后解锁。
--删除表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.--对''staff_id'列解锁。
SELECT RELEASE_LOCK('staff_id');
RELEASE_LOCK('STAFF_ID')
----------------------
1
1 rows fetched.语法:
ROW_NUMBER() OVER (partition by expr order by expr)
功能:只能用于column list中,对查询返回的数据先进行分组再进行排序,然后分组打上排序序号。
示例:
根据部门分组,显示每个部门的工资等级。
--删除表employee。 DROP TABLE IF EXISTS employee;
--创建表employee。 CREATE TABLE employee (staff_id INT,section_id INT,max_salary NUMBER(10,2));
--加入数据。 INSERT INTO employee values(1,10,5500.00); INSERT INTO employee values(2,10,4500.00); INSERT INTO employee values(3,20,1900.00); INSERT INTO employee values(4,20,4800.00); INSERT INTO employee values(5,40,6500.00); INSERT INTO employee values(6,40,14500.00); INSERT INTO employee values(7,40,44500.00); --提交事务。 COMMIT;
--按部门查询员工工资,并进行排序。 SELECT *, Row_Number() OVER (partition by section_id ORDER BY max_salary desc) rank FROM employee; STAFF_ID SECTION_ID MAX_SALARY RANK ------------ ------------ ---------------------------------------- ------------ 1 10 5500 1 2 10 4500 2 4 20 4800 1 3 20 1900 2 7 40 44500 1 6 40 14500 2 5 40 6500 3 7 rows fetched.
语法:
SCN2DATE(scn)
功能:由scn值转义为时间值。
说明:
属于DBA诊断函数,非SYSDBA用户不能使用。
scn值需要合法值,通过查询对象相关的视图可以得到。
示例:
返回scn值对应的时间值。
select scn2date(t.org_scn) from sys.table$ t where t.name = 'TEST'; SCN2DATE(T.ORG_SCN) ---------------------- 2019-01-10 20:35:38 1 rows fetched.
语法:
SERIAL_LASTVAL('OWNER','TABLE_NAME')功能:返回表的自增列的缓存值。
OWNER为表的owner。
TABLE_NAME为表名。
说明:
OWNER和TABLE_NAME必须为大写,且需要用引号括起来。
表如果不包含自增列,函数将返回报错:
GS-00866,the table has no auto increment column。
示例:
返回包含自增列的表employee的AUTO_INCREMENT列的缓存值。
--删除表employee。 DROP TABLE IF EXISTS employee;
--创建表employee。 CREATE TABLE employee (staff_id INT AUTO_INCREMENT primary key ,section_id INT,max_salary NUMBER(10,2)) AUTO_INCREMENT 1000;
--返回表employee的自增列的缓存值。
SELECT SERIAL_LASTVAL('SYS','EMPLOYEE');
SERIAL_LASTVAL('SYS','EMPLOYEE')
--------------------
1000
1 rows fetched.来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3162514/ ,如需转载,请注明出处,否则将追究法律责任。