8.140. HAS_ANY_COLUMN_PRIVILEGE
用法:
has_any_column_privilege(user, table, privilege) has_any_column_privilege(table, privilege)功能:
检查
user
用户(未指定时使用当前用户)是否能以特定方式访问一个表的任意列。希望的访问权限类型必须是下列值的某种组合:SELECT
、INSERT
、UPDATE
或REFERENCES
。注意在表级别上具有这些权限中的任意一种将会隐式地把它授予给表上的每一列。例子:
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
类似,并且列还可以使用名字或者属性号来指定。希望的访问权限类型必须是下列值的某种组合:SELECT
、INSERT
、UPDATE
或REFERENCES
。注意在表级别上具有这些权限中的任意一种将会隐式地把它授予给表上的每一列。例子:
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
数据库。 希望的访问权限类型必须是以下值的某种组合:CREATE
、CONNECT
、TEMPORARY
或TEMP
(等价于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
用户(未指定时使用当前用户)是否能以某种特定方式访问一个序列。所希望测试的访问权限类型必须是下列之一:USAGE
、SELECT
或UPDATE
。例子:
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
的变体,我们可以通过它们的参数数目和类型来区分它们) 。如果用名字指定,那么在必要时该名字可以是模式限定的。 所希望的权限类型是用一个文本串来指定的,它必须是下面的几个值之一:SELECT
、INSERT
、UPDATE
、DELETE
、TRUNCATE
、REFERENCES
或TRIGGER
。WITH 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。
参数说明:
expr1是INTEGER类型表达式或者是可以转换成INTEGER的类型。
expr2数据类型可以是系统的数据类型中的某一个(如:TEXT,INTEGER,FLOAT等)。
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)]')