金仓数据库 KingbaseES SQL 语言参考手册 (8. 函数(五))

8.140. HAS_ANY_COLUMN_PRIVILEGE

用法:

has_any_column_privilege(user, table, privilege)
has_any_column_privilege(table, privilege)

功能:

检查 user 用户(未指定时使用当前用户)是否能以特定方式访问一个表的任意列。希望的访问权限类型必须是下列值的某种组合:SELECTINSERTUPDATEREFERENCES。注意在表级别上具有这些权限中的任意一种将会隐式地把它授予给表上的每一列。

例子:

CREATE TABLE tbl();
SELECT  has_any_column_privilege('tbl', 'INSERT, UPDATE, REFERENCES');

8.141. HAS_COLUMN_PRIVILEGE

用法:

has_column_privilege(user, table, column, privilege)
has_column_privilege(table,column, privilege)

功能:

检查 user 用户(未指定时使用当前用户)是否能以特定方式访问一个表的 column 指定列。 has_column_privilege检查一个用户是否能以特定方式访问一个列。它的参数可能性与has_table_privilege类似,并且列还可以使用名字或者属性号来指定。希望的访问权限类型必须是下列值的某种组合:SELECTINSERTUPDATEREFERENCES。注意在表级别上具有这些权限中的任意一种将会隐式地把它授予给表上的每一列。

例子:

SELECT has_column_privilege(9999,'nosuchcol','select');
SELECT has_column_privilege('mytable','f2','select');

8.142. HAS_DATABASE_PRIVILEGE

用法:

has_database_privilege(user, database, privilege)
has_database_privilege(database, privilege)

功能:

检查 user 用户(未指定时使用当前用户)是否能以 privilege 指定方式访问 database 数据库。 希望的访问权限类型必须是以下值的某种组合:CREATECONNECTTEMPORARYTEMP(等价于TEMPORARY)。

例子:

SELECT  has_database_privilege(current_database(), 'CONNECT');

8.143. HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE

用法:

has_foreign_data_wrapper_privilege(user, fdw, privilege)
has_foreign_data_wrapper_privilege(fdw, privilege)

功能:

检查``user`` 用户(未指定时使用当前用户)是否能以特定方式访问一个外部数据包装器。它的参数可能性类似于has_table_privilege。希望的访问权限类型必须是USAGE

例子:

SELECT has_foreign_data_wrapper_privilege('foo', 'USAGE');

8.144. HAS_FUNCTION_PRIVILEGE

用法:

has_function_privilege(user, function, privilege)
has_function_privilege(function, privilege)

功能:

检查 user 用户(未指定时使用当前用户)是否能以特定方式访问一个函数。其参数可能性类似has_table_privilege。在用一个文本串而不是 OID 指定一个函数时,允许的输入和regprocedure数据类型一样(参阅 对象标识符类型 )。希望的访问权限类型必须是EXECUTE

例子:

SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');

8.145. HAS_LANGUAGE_PRIVILEGE

用法:

has_language_privilege(user, language, privilege)
has_language_privilege(language, privilege)

功能:

检查 user 用户(未指定时使用当前用户)是否可以以某种特定的方式访问一个过程语言。希望的访问权限类型必须是USAGE。

例子:

SELECT  has_database_privilege(current_database(), 'CONNECT');

8.146. HAS_SCHEMA_PRIVILEGE

用法:

has_schema_privilege(user, schema, privilege)
has_schema_privilege(schema, privilege)

功能:

检查 user 用户(未指定时使用当前用户)是否能以 privilege 指定方式访问 schema 。希望的访问权限类型必须是CREATE或USAGE。

例子:

SELECT has_schema_privilege('public', 'USAGE');

8.147. HAS_SEQUENCE_PRIVILEGE

用法:

has_sequence_privilege(user, sequence, privilege)
has_sequence_privilege(sequence, privilege)

功能:

检查 user 用户(未指定时使用当前用户)是否能以某种特定方式访问一个序列。所希望测试的访问权限类型必须是下列之一:USAGESELECTUPDATE

例子:

CREATE SEQUENCE x_seq;
SELECT has_sequence_privilege('x_seq', 'SELECT');

8.148. HAS_SERVER_PRIVILEGE

用法:

has_server_privilege(user, server, privilege)
has_server_privilege(server, privilege)

功能:

检查 user 用户(未指定时使用当前用户)是否可以以某种特定的方式访问一个外部服务器。 希望的访问权限类型必须是CREATE或USAGE。

例子:

SELECT has_server_privilege('regress_test_role',(SELECT oid FROM pg_foreign_server WHERE srvname='s8'), 'USAGE');

8.149. HAS_TABLE_PRIVILEGE

用法:

has_table_privilege(user, table, privilege)
has_table_privilege(table,privilege)

功能:

检查 user 用户(未指定时使用当前用户)是否可以用某种特定的方式访问一个表。 该用户可以通过名字或者 OID (sys_authid.oid) 来指定,也可以用public表示 PUBLIC 伪角色。如果省略该参数,则使用current_user。 该表可以通过名字或者 OID 指定(因此,实际上有六种 has_table_privilege的变体,我们可以通过它们的参数数目和类型来区分它们) 。如果用名字指定,那么在必要时该名字可以是模式限定的。 所希望的权限类型是用一个文本串来指定的,它必须是下面的几个值之一: SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERWITH GRANT OPTION可以被选择增加到一个权限类型来测试是否该权限是使用转授选项得到。另外,可以使用逗号分隔来列出多个权限类型,在这种情况下只要具有其中之一的权限则结果为(权限字符串的大小写并不重要,可以在权限名称之间出现额外的空白,但是在权限名内部不能有空白)。

例子:

SELECT has_table_privilege('myschema.mytable', 'select');
SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');

8.150. HAS_TABLESPACE_PRIVILEGE

用法:

has_tablespace_privilege(user, tablespace, privilege)
has_tablespace_privilege(tablespace, privilege)

功能:

检查 user 用户(未指定时使用当前用户)是否可以以某种特定的方式访问一个表空间。其参数可能性类似``has_table_privilege``。希望的访问权限类型必须是CREATE

例子:

CREATE TABLESPACE mytsp LOCATION '/path/to/mytsp';
SELECT has_tablespace_privilege('mytsp', 'CREATE');

8.151. HAS_TYPE_PRIVILEGE

用法:

has_type_privilege(user, type, privilege)
has_type_privilege(type, privilege)

功能:

检查 user 用户(未指定时使用当前用户)是否能以特定的方式访问一种类型。其参数的可能性类同于has_table_privilege。在用字符串而不是 OID 指定类型时,允许的输入和regtype数据类型相同(见 对象标识符类型 )。期望的访问特权类型必须等于USAGE

例子:

SELECT has_type_privilege('int8', 'USAGE');

8.152. HEIGHT

用法:

height(box)

功能:

几何函数,返回方框的垂直尺寸

例子:

SELECT height(box '((0,0),(1,1))');

8.153. HOST

用法:

height(inet)

功能:

inet函数,抽取IP地址为文本。

例子:

SELECT host('192.168.1.5/24');

8.154. HOSTMASK

用法:

hostmask(inet)

功能:

inet函数,为网络地址构造主机掩码。

例子:

SELECT hostmask('192.168.23.20/30');

8.155. IF

用法:

if(expr1 INT兼容类型, expr2 任意类型, expr3 任意类型)

功能:

如果expr1 不为NULL并且expr1不等于0,返回expr2作为结果,否则返回expr3。

参数说明:

  1. expr1是INTEGER类型表达式或者是可以转换成INTEGER的类型。

  2. expr2数据类型可以是系统的数据类型中的某一个(如:TEXT,INTEGER,FLOAT等)。

  3. expr3数据类型可以是系统的数据类型中的某一个(如:TEXT,INTEGER,FLOAT等)。

返回值说明:

返回值的数据类型:返回类型取决于expr2,expr3的类型。

例子:

SELECT IF(100, 'T', 'F') AS RESULT1,
       IF(1 - 1, 'T', 'F') AS RESULT2,
       IF('100', 'T', 'F') AS RESULT3,
       IF(NULL, 'T', 'F') AS RESULT4;

8.156. IFNULL

用法:

ifnull(expr1, expr2)

功能:

``expr1``不是NULL,IFNULL返回``expr1``。否则它返回``expr2``

例子:

SELECT ifnull(NULL,'exp2');
SELECT ifnull('exp1','exp2');

8.157. INET_CLIENT_ADDR

用法:

inet_client_addr()

功能:

inet_client_addr返回当前客户端的 IP地址。如果连接是通过 Unix域套接字进行的,返回 NULL。

例子:

SELECT inet_client_addr();

8.158. INET_CLIENT_PORT

用法:

inet_client_port()

功能:

inet_client_port返回当前客户端的端口号。如果连接是通过 Unix域套接字进行的,返回 NULL。

例子:

SELECT inet_client_port();

8.159. INET_MERGE

用法:

inet_merge(inet,inet)

功能:

inet_merge返回包括给定网络的最小网络。

例子:

SELECT inet_merge('192.168.1.5/24', '192.168.2.5/24');

8.160. INET_SAME_FAMILY

用法:

inet_same_family(inet, inet)

功能:

判断连个地址是否同一个IP协议族。

例子:

SELECT inet_same_family(('192.168.1.5/24', '::1'));

8.161. INET_SERVER_ADDR

用法:

inet_server_addr()

功能:

inet_server_addr返回接受当前连接的服务器的 IP。如果连接是通过 Unix域套接字进行的,返回 NULL。

例子:

SELECT inet_server_addr();

8.162. INET_SERVER_PORT

用法:

inet_server_port()

功能:

inet_server_port返回接受当前连接的服务器的端口号。如果连接是通过 Unix域套接字进行的,返回 NULL。

例子:

SELECT inet_server_port();

8.163. INITCAP

用法:

initcap(string)

功能:

INITCAP返回char,每个单词的第一个字母大写,所有其他字母小写。单词由空格或非字母数字字符分隔。

char可以是任何数据类型CHAR、VARCHAR、NCHAR或NVARCHAR。返回值与 的数据类型相同char。数据库根据为基础字符集定义的二进制映射设置初始字符的大小写。

例子:

以下示例将字符串中的每个单词大写:

SELECT initcap('hi THOMAS');

8.164. INSERTCHILDXML

用法:

insertchildxml(xml_instance xml,  xpath text, child_expr text , value_expr xml)
insertchildxml(xml_instance xml,  xpath text , child_expr text ,value_expr xml, namespace _text)

功能:

函数insertchildxml``value_expr``提供的值作为``xpath``指定节点的子节点插入到``xml_instance``中。成功则返回插入后的``xml_instance``数据,失败则返回ERROR。

此函数使用前需要创建kdb_utils_function扩展。

例子:

SELECT insertchildxml('<a>one <b></b> three <b></b></a>', '//b', 'name', '<name>newnode</name>');
SELECT insertchildxml('<a xmlns="http://example.com"><b>test</b></a>', '//mydefns:b/text()', 'name', '<name>newnode</name>', ARRAY[ARRAY['mydefns', 'http://example.com']]);

8.165. INSERTCHILDXMLAFTER

用法:

insertchildxmlafter(xml_instance xml,  xpath text, child_expr text , value_expr xml)
insertchildxmlafter(xml_instance xml,  xpath text , child_expr text ,value_expr xml,namespace _text)

功能:

函数insertchildxmlafter``value_expr``提供的一个或多个集合元素作为``xpath``指定的目标父元素的子元素插入到``child_expr``指定的现有集合元素之后。成功则返回插入后的``xml_instance``数据,失败则返回ERROR。

此函数使用前需要创建kdb_utils_function扩展。

例子:

在指定节点的所有“b”子节点之后插入:

SELECT insertchildxmlafter('<a>one<b>two</b><b>four</b></a>', '/a', 'b', '<c>three</c>');

在指定节点的第一个“b”子节点之后插入

SELECT insertchildxmlafter('<a>one<b>two</b><b>four</b></a>', '/a', 'b[1]', '<c>three</c>');

在指定节点的第二个“b”子节点之后插入

SELECT insertchildxmlafter('<a>one<b>two</b><b>four</b></a>', '/a', 'b[2]', '<c>three</c>');

8.166. INSERTCHILDXMLBEFORE

用法:

insertchildxmlbefore(xml_instance xml,  xpath text, child_expr text , value_expr xml)
insertchildxmlbefore(xml_instance xml,  xpath text , child_expr text , value_expr xml,namespace _text)

功能:

函数insertchildxmlbefore``value_expr``提供的一个或多个集合元素作为``xpath``指定的目标父元素的子元素插入到``child_expr``指定的现有集合元素之前。成功则返回插入后的``xml_instance``数据,失败则返回ERROR。

此函数使用前需要创建kdb_utils_function扩展。

例子:

在指定节点的所有“b”子节点之前插入:

SELECT insertchildxmlbefore('<a>one<b>23</b><b>two<d>four</d></b></a>', '/a', 'b', '<c>three</c>');

在指定节点的第一个“b”子节点之前插入:

SELECT insertchildxmlbefore('<a>one<b>two</b></a>', '/a', 'b[1]', '<c>three</c>');

在指定节点的第二个“b”子节点之前插入:

SELECT insertchildxmlbefore('<a>one<b>23</b><b>two<d>four</d></b></a>', '/a', 'b[2]', '<c>three</c>');

8.167. INSERTXMLAFTER

用法:

insertxmlafter(xml_instance xml,  xpath text , value_expr xml)
insertxmlafter(xml_instance xml,  xpath text , value_expr xml,namespace _text)

功能:

函数insertxmlafter``value_expr``提供的值插入到``xpath``指定的节点之后。成功则返回插入后的``xml_instance``数据,失败则返回ERROR。

此函数使用前需要创建kdb_utils_function扩展。

例子:

SELECT insertxmlafter('<a xmlns="http://example.com"><b>test</b></a>', '//mydefns:b/text()', '<name>newnode</name>', ARRAY[ARRAY['mydefns', 'http://example.com']]);

8.168. INSERTXMLBEFORE

用法:

insertxmlbefore(xml_instance xml,  xpath text , value_expr xml)
insertxmlbefore(xml_instance xml,  xpath text , value_expr xml,namespace _text)

功能:

函数insertxmlbefore``value_expr``提供的值插入到``xpath``指定的节点之前。成功则返回插入后的``xml_instance``数据,失败则返回ERROR。

此函数使用前需要创建kdb_utils_function扩展。

例子:

SELECT insertxmlbefore('<a><b>b</b></a>','/a/b','<c>c</c>');
SELECT insertxmlbefore('<a><b></b></a>','/a/b','<c>c</c>');
SELECT insertxmlbefore('<a><b></b></a>','/a/b','<c></c>');
SELECT insertxmlbefore('<a xmlns="http://example.com"><b>test</b></a>', '//mydefns:b/text()', '<name>newnode</name>', ARRAY[ARRAY['mydefns', 'http://example.com']]);

8.169. INSTR

用法:

instr(expr1 text, expr2 text,[expr3 int[,expr4 int]])

功能:

在父字符串 expr1 中的第 expr3 个位置(从 1 开始)以字符为单位开始查找第 expr4 次出现的子字符串的位置,0 表示不包含子字符串 expr2。如果expr3 为负,则从 expr1 的倒数第 expr3 个位置开始反向查找,位置依然是从字符串开头算起。

例子:

SELECT instr('bcaaaaabbc', 'a', -2);

8.170. INSTRB

用法:

instrb(expr1 text,expr2 text,[expr3 int[,expr4 int]])

功能:

在父字符串 expr1 中的第 expr3 个位置(从 1 开始)以字符为单位开始查找第expr4 次出现的子字符串的位置, 0 表示不包含子字符串 expr2。如果 expr3 为负,则从 expr1 的倒数第 expr3 个位置开始反向查找,位置依然是从字符串开头算起。

例子:

SELECT instrb(’bcaaaaabbc’, ’a’, -2);

8.171. ISEMPTY

用法:

isempty(anyrange)

功能:

判断范围 anyrange 是否为空。

例子:

SELECT isempty(numrange(1.1,2.2));

8.172. ISFINITE

用法:

isfinite(date)
isfinite(timestamp)
isfinite(interval)

功能:

判断传入参数是否为有限值。

例子:

SELECT isfinite(date '2001-02-16');
SELECT isfinite(timestamp '2001-02-16 21:28:30');
SELECT isfinite(interval '4 hours');

8.173. ISNULL

用法:

isnull(expr1任意类型, expr2任意类型)

功能:

等同于函数NVL(expr1任意类型, expr2任意类型)。当 expr1 为 NULL 时,用 expr2 代替本表达式的值;否则本函数的值保持 expr1 的原值。另外 expr1 及 expr2 数据类型可以是系统的数据类型中的某一个(如:TEXT、INTEGER、FLOAT等),expr1 和 expr2 的数据类型应该一致。

如果 expr1 不为 NULL,数据类型同 expr1;如果 expr1 为 NULL, 数据类型同 expr2

在兼容性方面,ISNULL相当于 MSSQL 2005中的 ISNULL 函数、KingbaseES中的 NVL 函数、ORACLE中的 NVL 函数。

例子:

SELECT ISNULL('2001-01-10', TO_DATE('05 Dec 2000', 'DD Mon YYYY')) AS RESULT1,
       ISNULL(NULL, TO_DATE('05 Dec 2000', 'DD Mon YYYY')) AS RESULT2,
       ISNULL(NULL, 123) AS RESULT3, ISNULL(789, 123) AS RESULT4,
       ISNULL(NULL, '123') AS RESULT5;

8.174. ISOPEN

用法:

isopen(path)

功能:

几何函数,判断参数是否一个开放路径。

例子:

isopen(path '[(0,0),(1,1),(2,0)]')
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值