其他函数
ARRAY_LENGTH
语法:
ARRAY_LENGTH(expr)
功能:计算给定数组expr(或能够转换成数组类型的字符串)的长度(不是元素个数)。
示例:
SELECT array_length('{1,2,3}') FROM SYS_DUMMY; ARRAY_LENGTH('{1,2,3}') ------------------------- 3 SELECT array_length('{}') FROM SYS_DUMMY; ARRAY_LENGTH('{}') ------------------ 0
--创建表TEST。 CREATE TABLE test (f1 INTEGER, f2 INTEGER, f3 INTEGER[]);
--插入记录。 INSERT INTO test VALUES (1,1,array[1,2]), (1,2,array[4,5,6]), (1,3,array[1,3]), (2,100,array[2,4]), (2,200,array[6,8]), (2, 300,array[7,9]), (3, 500,array[5,0]), (3,600,array[9,10]);
--查询给定数组长度。 SELECT array_length(array_agg(f1)) FROM test; ARRAY_LENGTH(F1) ---------------- 8 SELECT array_length(f3) FROM test; ARRAY_LENGTH(F3) ---------------- 2 3 2 2 2 2 2 2
--更新。 UPDATE test SET f3[100] = 100 where f1 = 3; SELECT array_length(f3) FROM test; ARRAY_LENGTH(F3) ---------------- 2 3 2 2 2 2 100 100
BIN2HEX
语法:
BIN2HEX(expr)
功能:将如下数据类型转换成十六进制数(带0x)。
数据类型
说明
GS_TYPE_CHAR
char类型
GS_TYPE_VARCHAR
varchar类型
GS_TYPE_STRING
string类型MD
GS_TYPE_VARBINARY
varbinary类型
GS_TYPE_BINARY
binary类型
GS_TYPE_RAW
raw类型
示例:
将二进制字符串'A123'转换为十六进制。
SELECT BIN2HEX('A123') from SYS_DUMMY; BIN2HEX('A123') --------------- 0x41313233 1 rows fetched.
CHAR_LENGTH
语法:
CHAR_LENGTH(str)
功能:返回输入字符串的长度。
- 字符串str需要以单引号括起来。
- 如果入参是数字则被隐式转为字符串。数字不能超出40位(超出了数值转换的最大值),超出不保证结果正确性。
示例:
返回字符串'character'的长度。
SELECT CHAR_LENGTH('character') FROM SYS_DUMMY; CHAR_LENGTH('CHARACTER') ------------------------ 9 1 rows fetched.
COALESCE
语法:
COALESCE ( expression, expression [ , ...] )
功能:返回入参中第一个非空表达式。
expression可以是任意表达式。
说明:如果所有参数均为NULL,则COALESCE返回NULL。
示例:
返回第一个非空表达式。
SELECT COALESCE( NULL, 34, 13, 0 ); COALESCE( NULL, 34, 13, 0 ) --------------------------- 34 1 rows fetched.
CONNECTION_ID
语法:
CONNECTION_ID()
功能:返回当前连接对应的会话ID。
说明:
- 在同一时间点所有并发的连接之间的会话ID都是不同的。
- 需要注意的是,如果一个连接断开后其对应的会话被后面新建的一个连接所复用,则对应的会话ID也会被复用。
示例:
返回当前连接会话ID。
SELECT CONNECTION_ID() from SYS_DUMMY; CONNECTION_ID() --------------- 48 1 rows fetched.
TYPE_ID2NAME
语法:
TYPE_ID2NAME(data_type_id)
功能:用于返回数据类型ID对应的数据类型名。
说明:
- 该函数为诊断函数,如果数据类型ID不存在,则返回UNKNOWN_TYPE。
- data_type_id为数据类型ID ,具体对应关系如下:
data_type_id
data_type_name
20001
BINARY_INTEGER
20002
BINARY_BIGINT
20003
BINARY_DOUBLE
20004
NUMBER
20005
DECIMAL
20006
DATE
20007
TIMESTAMP
20008
CHAR
20009
VARCHAR
20010
VARCHAR
20011
BINARY
20012
VARBINARY
20013
CLOB
20014
BLOB
20015
CURSOR
20016
COLUMN
20017
BOOLEAN
20018
TIMESTAMP_TZ
20019
TIMESTAMP_LTZ
20020
INTERVAL
20021
INTERVAL YEAR TO MONTH
20022
INTERVAL DAY TO SECOND
20023
RAW
20024
IMAGE
20025
INTEGER UNSIGNED
20026
BIGINT UNSIGNED
20027
SMALLINT
20028
SMALLINT UNSIGNED
20029
TINYINT
20030
TINYINT UNSIGNED'
示例:
返回数据类型ID对应的数据类型名。
select TYPE_ID2NAME(20029); TYPE_ID2NAME(20029) ---------------------------------------------------------------- TINYINT 1 rows fetched.
DECODE_NAME
语法:
DECODE_NAME(INDEX_NAME)
功能:去除相同索引或约束的oid部分。该功能暂时未启用。
FOUND_ROWS
语法:
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”。
示例:
返回staff_id>1的员工个数。--删除表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_DISTRIBUTE_STR
该函数只在分布式场景使用,单机场景返回为空。
GET_LOCK
语法:
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.
TRY_GET_LOCK
语法:
TRY_GET_LOCK(name_expr)
功能:TRY_GET_LOCK(name_expr) 为一个会话尝试获取一把锁名为name_expr的排他咨询锁(exclusive advisory lock),若获取成功返回TRUE,之后另一个会话若也调用TRY_GET_LOCK(name_expr)尝试获取同名锁时,将会立刻返回FALSE,获取同名锁失败,直到该锁释放。
TRY_GET_LOCK()的返回值如下:
- TRUE: 成功获取到锁。
- FALSE: 未能获取到锁。
通过TRY_GET_LOCK(name_expr)获取到的锁可通过以下两种方式释放:
- 显式释放:通过调用RELEASE_LOCK()释放。
- 隐式释放:会话中断(不论正常或异常)时该会话占有的锁自动释放。
说明:
- 表示锁名的name_expr的计算结果的字符串长度不能超过64字节。
- 同一个会话同时最多可以加32把锁。
- 同一会话可以多次对同一个锁名上锁,这种情况下,需要对该锁名解锁同样的次数。对同一锁名多次加锁时,第二次加锁开始的次数并不计入上述所说的32把锁的个数。
示例:
对表中某一列进行加锁。
--删除表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 TRY_GET_LOCK('staff_id'); TRY_GET_LOCK('STAFF_ID') -------------------- TRUE 1 rows fetched.
GET_SHARED_LOCK
语法:
GET_SHARED_LOCK(name_expr [, timeout_expr])
功能:GET_SHARED_LOCK()为一个会话获取一把锁名为name_expr的共享咨询锁,之后另一个会话也可调用GET_SHARED_LOCK()获取该同名锁;如果该锁已被其他会话锁为排他咨询锁,则将会等待参数timeout_expr所指定的秒数结束后获取锁失败,在此期间内若该排他锁被释放了,或只有本会话使用该锁,则获取该锁成功。
GET_SHARED_LOCK()的返回值如下:
- TRUE: 成功获取到锁。
- FALSE: 未能获取到锁。
通过GET_SHARED_LOCK()获取到的锁可通过以下两种方式释放:
- 显式释放:通过调用RELEASE_SHARED_LOCK(name_expr)释放。
- 隐式释放:会话中断(不论正常或异常),时该会话占有的锁自动释放。
说明:
- 表示锁名的name_expr的计算结果的字符串长度不能超过64字节。
- 同一个会话同时最多可以加32把锁。
- 同一会话可以多次对同一个锁名上锁,需要对该锁名解锁同样的次数。对同一锁名多次加锁时,第二次加锁开始的次数并不计入上述所说的32把锁的个数。
- timeout_expr未指定或指定为一个负值时,GET_SHARED_LOCK()获取不到锁时将一直等待。
- TRY_GET_SHARED_LOCK(name_expr)尝试获取名为name_expr的会话级共享咨询锁,无论获取成功或失败都立刻返回结果。
示例:
对表中某一列进行加锁。
--删除表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_SHARED_LOCK('staff_id',5); GET_SHARED_LOCK('STAFF_ID',5) -------------------- TRUE 1 rows fetched.
GET_XACT_LOCK
语法:
GET_XACT_LOCK(name_expr)
功能:GET_XACT_LOCK(name_expr) 为一个事务获取一把锁名为name_expr的排他咨询锁(exclusive advisory lock),若获取成功返回TRUE,之后另一个事务若也调用TRY_GET_LOCK(name_expr)获取同名锁时,将会一直等待,直到该锁释放。
GET_XACT_LOCK(name_expr)的返回值如下:
- TRUE: 成功获取到锁。
- FALSE: 未能获取到锁。
通过GET_XACT_LOCK(name_expr)获取到的锁可通过以下方式释放:
- 隐式释放: 事务/会话中断(不论正常或异常)时该事务/会话占有的锁自动释放。
说明:
- 表示锁名的name_expr的计算结果的字符串长度不能超过64字节。
- 同一个事务同时最多可以加32把锁。
- 同一事务可以多次对同一个锁名上锁,在事务/会话结束时会主动释放,无需显示释放。对同一锁名多次加锁时,第二次加锁开始的次数并不计入上述所说的32把锁的个数中。
示例:
对表中某一列进行加锁。
--删除表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_XACT_LOCK('staff_id'); GET_XACT_LOCK('STAFF_ID') -------------------- TRUE 1 rows fetched.
TRY_GET_XACT_LOCK
语法:
TRY_GET_XACT_LOCK(name_expr)
功能:TRY_GET_XACT_LOCK(name_expr) 为一个事务尝试获取一把锁名为name_expr的排他咨询锁(exclusive advisory lock),若获取成功返回TRUE,之后另一个事务若也调用TRY_GET_LOCK(name_expr)尝试获取同名锁时,将会立刻返回FALSE,获取同名锁失败,直到该锁释放。
TRY_GET_XACT_LOCK()的返回值如下:
- TRUE: 成功获取到锁。
- FALSE: 未能获取到锁。
通过TRY_GET_XACT_LOCK(name_expr)获取到的锁可通过以下方式释放:
- 隐式释放: 事务/会话中断(不论正常或异常)时该事务/会话占有的锁自动释放。
说明:
- 表示锁名的name_expr的计算结果的字符串长度不能超过64字节。
- 同一个事务同时最多可以加32把锁。
- 同一事务可以多次对同一个锁名上锁,在事务/会话结束时会主动释放,无需显示释放。对同一锁名多次尝试加锁时,若第一次加锁成功,则第二次加锁开始的次数并不计入上述所说的32把锁的个数中。
示例:
对表中某一列进行加锁。
--删除表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 TRY_GET_XACT_LOCK('staff_id'); TRY_GET_XACT_LOCK('STAFF_ID') -------------------- TRUE 1 rows fetched.
GET_XACT_SHARED_LOCK
语法:
GET_XACT_SHARED_LOCK(name_expr [, timeout_expr])
功能:GET_XACT_SHARED_LOCK(name_expr[, timeout_expr]) 为一个事务获取一把锁名为name_expr的共享咨询锁,若获取成功返回TRUE,之后另一个事务也可调用GET_XACT_SHARED_LOCK(name_expr)获取该同名锁,如果该同名锁被其他事务锁为排他咨询锁时,将会等待timeout_expr秒,在此期间如果该排他锁被释放,则获取成功,否则获取失败。
GET_XACT_SHARED_LOCK(name_expr[, timeout_expr])的返回值如下:
- TRUE: 成功获取到锁。
- FALSE: 未能获取到锁。
通过GET_XACT_SHARED_LOCK(name_expr[, timeout_expr])获取到的锁可通过以下方式释放:
- 隐式释放: 事务/会话中断(不论正常或异常)时该事务/会话占有的锁自动释放。
- 通过TRY_GET_XACT_SHARED_LOCK(name_expr)尝试获取名为name_expr的共享咨询锁,无论获取成功或者失败都立刻返回。
说明:
- 表示锁名的name_expr的计算结果的字符串长度不能超过64字节。
- 同一个事务同时最多可以加32把锁。
- 同一事务可以多次对同一个锁名上锁,在事务/会话结束时会主动释放,无需显示释放。对同一锁名多次加锁时,第二次加锁开始的次数并不计入上述所说的32把锁的个数中。
示例:
对表中某一列进行加锁。
--删除表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_XACT_SHARED_LOCK('staff_id',5); GET_XACT_SHARED_LOCK('STAFF_ID',5) -------------------- TRUE 1 rows fetched.
GREATEST
语法:
GREATEST( expr1 [, expr2, ... expr_n] )
功能:GREATEST函数返回一个或多个表达式中的最大的值。
- 返回值类型与expr1的数据类型相同。
- expr1:要评估的第一个表达式是否是最大的。
- expr2,... expr_n可选的,要评估的其他表达式。
示例1:
SELECT GREATEST(2, 5, 12, 3); GREATEST(2, 5, 12, 3) --------------------- 12 1 rows fetched.
示例2:
SELECT GREATEST('2', '5', '12', '3'); GREATEST('2', '5', '12', '3') ----------------------------- 5 1 rows fetched.
示例3:
SELECT GREATEST('apples', 'oranges', 'bananas'); GREATEST('APPLES', 'ORANGES', 'BANANAS') ---------------------------------------- oranges 1 rows fetched.
示例4:
SELECT GREATEST('apples', 'applis', 'applas'); GREATEST('APPLES', 'APPLIS', 'APPLAS') -------------------------------------- applis 1 rows fetched.
HASH
语法:
HASH(arg1[, arg2, ... arg_n])
功能:根据所有入参计算哈希值。
说明:
- 入参个数最大不超过64个。
- 入参数据类型不支持blob、clob和长度大于8000字节的字符串或二进制字节流。
示例:
SELECT HASH('abc'); HASH('ABC') ------------- 2934528074 1 rows fetched.
ISNUMERIC
语法:
ISNUMERIC(str)
功能:判断入参str是否可以被转换成数字。若可以转换则返回1,否则返回0。
说明:
- 入参是数值型或者字符串。
- 入参不能为$。
示例1:
SELECT ISNUMERIC('1' + 0) from SYS_DUMMY; ISNUMERIC('1' + 0) --------------------- 1 1 rows fetched.
示例2:
SELECT ISNUMERIC('a' || '1') from SYS_DUMMY; ISNUMERIC('A' || '1') --------------------- 0 1 rows fetched.
LAST_INSERT_ID
语法:
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.
LEAST
语法:
LEAST( expr1 [, expr2, ... expr_n] )
功能:LEAST函数返回一个或多个表达式中的最小的值。
- 返回值类型与最小的入参expr_n的数据类型相同。
- 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.
MD5
语法:
md5([expr])
功能:MD5函数将输入的参数expr按照md5算法加密,并输出密文。
- 参数为NULL时,返回NULL。
- 如果指定expr参数,则返回expr的md5值。
示例:
--将字符串“gauss”按照MD5算法加密。 select md5('gauss') from SYS_DUMMY; MD5('GAUSS') -------------------------------- 710a4950250286365cf841f765a790f1 1 rows fetched.
--创建表t_md5_test。 create table t_md5_test(f1 int,f2 real,f3 blob,f4 numeric(4,1),f5 varchar(10)); Succeed.
--向表t_md5_test插入数据。 insert into t_md5_test values(2147483648-1,2.345,'100100111111',2.345,'aabbcc'); 1 rows affected.
--加密表中数据列f1,f2,f3,f4,f5。 select md5(f1),md5(f2),md5(f3),md5(f4),md5(f5) from t_md5_test; MD5(F1) MD5(F2) MD5(F3) MD5(F4) MD5(F5) -------------------------------- -------------------------------- -------------------------------- -------------------------------- -------------------------------- c588c0a459f4ccc6f3dd26518d24707a 972da5c9c62440f43c8ad9c672e8bf36 3c96ce254c3e76d02e6959f19609c6dc 1a18da63cbbfb49cb9616e6bfd35f662 61a60170273e74a5be90355ffe8e86ad 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
另外,由于GaussDB 100中的数据库对象没有完全的全局唯一标识,因此返回的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));