ITPub博客

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

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

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

SHA

不建议在安全场景中使用该函数。

语法:

SHA(str_expr)

功能:为传入的参数按SHA算法生成一个定长的HASH值,并将该HASH值按字符串形式返回(40字节)。函数SHA1的别名,功能与SHA1相同。

说明:

  • str_expr为字符串表达式,长度超过8000会报错。

  • 传入的值为NULL时,该函数也返回NULL。

示例:

返回abc的HASH值。

SELECT SHA('abc');

SHA('ABC')
--------------------
A9993E364706816ABA3E25717850C26C9CD0D89D

1 rows fetched.

SHA1

不建议在安全场景中使用该函数。

语法:

SHA1(str_expr)

功能:为传入的参数按SHA1算法生成一个定长的HASH值,并将该HASH值按字符串形式返回(40字节)。

说明:

  • str_expr为字符串表达式,长度超过8000会报错。

  • 传入的值为NULL时,该函数也返回NULL。

示例:

返回abc的HASH值。

SELECT SHA1('abc');

SHA1('ABC')
--------------------
A9993E364706816ABA3E25717850C26C9CD0D89D

1 rows fetched.

SOUNDEX

语法:

SOUNDEX(expr)

功能:返回字符串参数的语音表示形式。

示例:

返回姓氏发音与SMYTHE相同的员工姓名。

--删除表employee。 
DROP TABLE IF EXISTS employee;
--创建表employee。
CREATE TABLE employee (last_name varchar(20) ,first_name varchar(20));
--加入数据。
INSERT INTO employee(last_name,first_name) values('Smith','Lindsey');
INSERT INTO employee(last_name,first_name) values('Smith','William');
INSERT INTO employee(last_name,first_name) values('Brown','Bill');
--姓氏发音与SMYTHE相同的员工姓名。
SELECT last_name, first_name
     FROM employee
     WHERE SOUNDEX(last_name)
         = SOUNDEX('SMYTHE')
     ORDER BY last_name, first_name;

LAST_NAME             FIRST_NAME
-------------------- --------------------
Smith                Lindsey
Smith                William

2 rows fetched.

SYS_CONTEXT

语法:

SYS_CONTEXT(namespace_expr, parameter_expr [, length])

功能:返回指定的namespace关联的上下文中的配置参数(parameter)值。

在当前版本中支持的namespace和parameter如下:

namespace名: USERENV,该namespace下支持的参数为:
  • SID:当前连接对应的会话ID。与CONNECTION_ID()类似,如果一个连接断开后其对应的会话被后面新建的一个连接所复用,则对应的会话ID也会被复用。

  • TERMINAL:当前session的客户端机器的HOST名。

说明:

  • namespace_expr和parameter_expr必须是计算结果可转换为字符串的表达式。

  • 返回值类型为字符串,默认长度为256字节。超长部分被截断。

  • 第三参数length表示的是该函数返回值的字符串最大长度,length必须是一个可以隐式转换为INTEGER类型的表达式。length的值的有效长度为1~4000,若用户指定的length不在此范围内,则仍然取默认值256字节。

示例1:

返回当前会话ID。

SELECT SYS_CONTEXT('USERENV', 'SID') FROM DUAL;

SYS_CONTEXT('USERENV', 'SID')
----------------------------------------------------------------
49

1 rows fetched.

示例2:

返回当前session的客户端机器的HOST名。

SELECT SYS_CONTEXT('USERENV', 'TERMINAL') FROM DUAL;

SYS_CONTEXT('USERENV', 'TERMINAL')
----------------------------------------------------------------
127.0.0.1

1 rows fetched.

SYS_GUID

语法:

SYS_GUID()

功能:生成一个16字节的全局唯一标识(global unique identifier),返回值类型是BINARY。

说明:若要用字符串类型字段接收SYS_GUID()的结果,由于二进制字节转换为字符串是按16进制表示,因此需要将字段定义为32字节及以上。

示例:

创建一个表格,以全局唯一标识作为主键。

--删除表employee。
DROP TABLE IF EXISTS employee;
--创建表employee。
CREATE TABLE employee(staff_id  raw(16) default sys_guid() primary key, first_name VARCHAR(32));
--加入数据。
INSERT INTO employee(first_name) values ( 'GREECE ');
INSERT INTO employee(first_name) values ( 'ALAN');
INSERT INTO employee(first_name) values ( 'FRANK ');
--提交事务。
COMMIT;
--查询表格。
SELECT * FROM employee;

STAFF_ID                                                         FIRST_NAME
---------------------------------------------------------------- --------------------------------
B5E49C6E665846A9BF7F00794748AA50                                 GREECE
2698BC648AC247968DC987555DEAB179                                 ALAN
46540BE9789E4BF49D0EA87705A444CC                                 FRANK

3 rows fetched.

UPDATING

语法:

UPDATING(col_name)

功能:在update的触发器中使用,用于判断该列上是否进行过UPDATE操作。

示例:

判断触发器的列是否发生变化更新,如果发生该列发生变化数据更新,则抛出异常。

--删除已存在的同名表training。
DROP TABLE IF EXISTS training;
--创建同名表training。
CREATE TABLE training(staff_id INT NOT NULL,course_name CHAR(50),course_start_date DATETIME, course_end_date DATETIME,exam_date DATETIME,score INT);
--创建触发器trigger_training。
CREATE OR REPLACE TRIGGER trigger_training BEFORE UPDATE ON training FOR EACH ROW AS
  wrong_error exception;
  errno  NUMBER;
  errmsg VARCHAR2(30);
BEGIN
  IF UPDATING('course_name') THEN
  errno  := '-20030';
  errmsg := 'cannot update this column';
  RAISE wrong_error;
  END IF;
  EXCEPTION
  WHEN wrong_error THEN
  raise_application_error(errno,errmsg);
END;
/

USERENV

语法:

USERENV(parameter_expr)

功能:是SYS_CONTEXT()的向下兼容版本,返回的是默认命名空间"USERENV"的配置参数的值。

在当前版本中支持的parameter如下:

  • SID:当前连接对应的会话ID。与CONNECTION_ID()类似,如果一个连接断开后其对应的会话被后面新建的一个连接所复用,则对应的会话ID也会被复用。

  • TERMINAL:当前session的客户端机器的HOST名。

说明:parameter_expr必须是计算结果可转换为字符串的表达式。返回值类型为字符串,最大长度为256字节,超长部分被截断。

示例:

返回当前回话ID。

SELECT USERENV('SID') FROM DUAL;

USERENV('SID')
----------------------------------------------------------------
48

1 rows fetched.

VERSION

语法:

VERSION()

功能:获取当前的版本信息。

示例:

获取当前的版本信息。

SELECT VERSION();

VERSION()
--------------------------------------------------
Zenith-Gauss100-OLTP-V300R001C00B300 Release

1 rows fetched.

VSIZE

语法:

VSIZE(expr)

功能:返回指定表达式的值在Gauss100 内部存储时所占的字节数。

说明:

  • 当表达式是NULL时,该函数也返回一个NULL。

  • 该函数不支持传入的参数表达式的值类型是CLOB类型。

示例:

返回字符Alice在Gauss100 内部存储时所占的字节数。

SELECT VSIZE('Alice') FROM DUAL;

VSIZE('ALICE')
--------------------
5

1 rows fetched.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3147726/ ,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2020-01-06

  • 博文量
    2907
  • 访问量
    19275