ITPub博客

首页 > 数据库 > > Gauss 100 数据库函数介绍之其他函数Part3

Gauss 100 数据库函数介绍之其他函数Part3

作者:GaussDB_数据库 时间:2020-03-02 10:19:01 0 删除 编辑

LEAST

语法:

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

语法:

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

语法:

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

语法:

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

语法:

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

语法:

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-01-06

  • 博文量
    2907
  • 访问量
    19288