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

8.401. UCASE

用法:

ucase(string)

功能:

将字符串转换成大写形式。

例子:

select ucase('abcdefG5');

+-----------+
| ucase     |
+===========+
| ABCDEFG5  |
+-----------+

8.402. UNICODE

用法:

UNICODE(character_expression)

功能:

UNICODE函数将为您提供第一个字符的整数值。对于输入表达式的第一个字符,它将返回整数值或者Unicode值。

例子: 以下示例返回输入表达式第一个字符的整数值:

SELECT UNICODE('KingbaseES');

 +-----------+
 |  unicode  |
 +===========+
 |    75     |
 +-----------+

8.403. UNNEST

用法:

UNNEST( array_expression [, ... ] ) [WITH ORDINALITY] [[AS] table_alias [(column_alias [, ... ])]]

功能:

特殊的表函数UNNEST可以使用任意数量的数组参数, 它会返回对应的列数。

例子:

SELECT id,unnest(string_to_array(element,'')) as elem;

8.404. UPDATEXML

用法:

updatexml(xml_instance xml, xpath text, value_expr xml)
updatexml(xml_instance xml, xpath text, value_expr text)
updatexml(xml_instance xml, xpath text, value_expr text, namespace text)

功能:

函数updatexml``xml_instance``实例中``xpath``指定的节点内容替换为``value_expr``提供的值,成功则返回更新后的``xml_instance``实例,失败则返回ERROR。此函数使用前需要创建kdb_utils_function扩展。

例子:

SELECT updatexml('<value>oldnode</value>', '/value', '<newvalue>newnode</newvalue>');

8.405. UPPER

用法:

 

目的:UPPER返回char,所有字母大写。char可以是任何数据类型CHAR, VARCHAR, NCHAR, NVARCHAR, CLOB, 或NCLOB. 返回值与 的数据类型相同char。数据库根据为基础字符集定义的二进制映射设置字符的大小写。对于语言敏感的大写,请参阅NLS_UPPER。

例子:以下示例以大写形式返回每个员工的姓氏:

SELECT UPPER(last_name) "Uppercase" FROM employees;

8.406. USER

用法:

USER

功能:

USER返回会话用户(登录的用户)的名称。这可能会在数据库会话期间发生变化,因为 Real Application Security 会话被附加或分离。对于企业用户,此函数返回架构。对于其他用户,它返回数据库用户名。如果 Real Application Security 会话当前附加到数据库会话,则它返回 user XS$NULL。

该函数返回一个VARCHAR值。

在分布式 SQL 语句中,UID和USER函数共同识别本地数据库上的用户。您不能在CHECK约束条件下使用这些函数。

例子:

以下示例返回会话用户:

SELECT USER FROM DUAL;

  +-----------+
  |    user   |
  +===========+
  |  postgres |
  +-----------+

8.407. USERENV

用法:

目的

USERENV返回有关当前会话的信息。此信息可用于编写特定于应用程序的审计跟踪表或确定会话当前使用的特定于语言的字符。您不能USERENV在CHECK约束条件下使用。

所有USERENV返回数据的调用,使用SESSIONID、SID和ENTRYID参数VARCHAR的调用除外,它们返回NUMBER。

USERENV 函数参数:

  • CLIENT_INFO ,返回值:CLIENT_INFO返回最多 64 字节的用户会话信息,这些信息可以由使用该DBMS_APPLICATION_INFO包的应用程序存储。

注意:某些商业应用程序可能正在使用此上下文值。请参阅这些应用程序的适用文档,以确定它们可能对该上下文区域的使用施加哪些限制。

  • ENTRYID , 返回值:当前审计条目号。审计 entryid 序列在细粒度审计记录和常规审计记录之间共享。您不能在分布式 SQL 语句中使用此属性。

  • ISDBA , 返回值:ISDBATRUE如果用户已通过操作系统或密码文件验证为具有 DBA 特权,则 返回“ ”。

  • LANG , 返回值:LANG返回语言名称的 ISO 缩写,比现有的 ' LANGUAGE' 参数更短的形式。

  • LANGUAGE , 返回值:LANGUAGE返回当前会话使用的语言和地区以及以下形式的数据库字符集:

language_territory.characterset

  • SESSIONID , 返回值:SESSIONID返回审计会话标识符。您不能在分布式 SQL 语句中指定此参数。

  • SID , 返回值:SID返回会话 ID。

  • TERMINAL , 返回值:TERMINAL返回当前会话终端的操作系统标识符。在分布式 SQL 语句中,此参数返回本地会话的标识符。在分布式环境中,仅远程SELECT语句支持此参数,远程INSERT、UPDATE或DELETE操作不支持此参数。

例子:以下示例返回LANGUAGE当前会话的参数:

SELECT USERENV('LANGUAGE') "Language" FROM DUAL;

Language

AMERICAN_AMERICA.WE8ISO8859P1

8.408. VAR_POP

用法:

var_pop(expression)

功能:

VAR_POP在丢弃该集合中的空值后返回输入值的总体方差。您可以将其用作聚合函数和分析函数。

如果函数应用于空集,则返回 null。该函数进行以下计算:

SUM((expr - (SUM(expr) / COUNT(expr))) ^ 2) / COUNT(expr)

例子:

select var_pop(c1) from (values(1),(2),(3),(4),(5)) as t(c1);

8.409. VAR_SAMP

用法:

var_samp(expression)

功能:

VAR_SAMP在丢弃该集合中的空值后返回一组数字的样本方差。您可以将其用作聚合函数和分析函数。

如果函数应用于空集,则返回 null。该函数进行以下计算:

(SUM(expr - (SUM(expr) / COUNT(expr))) ^ 2 ) / (COUNT(expr) - 1)

例子:

select var_samp(c1) from (values(1),(2),(3),(4),(5)) as t(c1);

8.410. VARIANCE

用法:

variance([distinct | all] expr) [over (analytic_clause)]

功能:

VARIANCE返回 expr的方差。您可以将其用作聚合或分析函数。

KingBase数据库按如下 方式计算expr方差:

  • 0 如果行数expr= 1

  • VAR_SAMP如果行数expr> 1

如果您指定DISTINCT,那么您只能指定query_partition_clause的analytic_clause。order_by_clause和windowing_clause是不允许 的。

此函数将任何数值数据类型或任何可以隐式转换为数值数据类型的非数值数据类型作为参数。该函数返回与参数的数值数据类型相同的数据类型。

例子:

select variance(c1) from (values(1),(2),(3),(4),(5)) as t(c1);

8.411. VERSION

用法:

VERSION

功能:

VERSION返回KingbaseES数据库版本信息,包含版本号及版本编译信息。该函数返回一个TEXT值。

例子: 以下示例返回数据库的版本信息:

SELECT VERSION FROM DUAL;

+------------------------------------------------------------------------------------------------------------------+
| version                                                                                                          |
+==================================================================================================================+
| KingbaseES V008R006B0001 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit |
+------------------------------------------------------------------------------------------------------------------+

8.412. WM_CONCAT

用法:

wm_concat(column)

功能:

WM_CONCAT实现column字段合并(此函数使用前需要创建kdb_utils_function扩展)。

例子:

CREATE EXTENSION kdb_utils_function;
CREATE TABLE wm_concat_test (id integer, name text, age integer, address text, salary numeric, b bytea);
INSERT INTO wm_concat_test VALUES(1, 'Paul', 32, 'California', 20000, '12345'), (2, 'Allen', 25, 'Texas', 15000, '2345'), (3, 'Teddy', 23, 'Norway', 20000, '3456'), (3, 'Mark', 25, 'Rich-Mond', 65000, '4567'), (5, 'David', 27, 'Texas', 85000, '5678'), (2, 'Kim', 22, 'South-Hall', 45000, '6789'),(7, 'James', 24, 'Houston', 10000, '7890'), (0, 'aaa', 123, 'bbb', 2222, '0998'), (1, 'baa', 123, 'bbb', 2222, '0998');
SELECT wm_concat(name) from wm_concat_test;
          wm_concat
-----------------------------------------------
Paul,Allen,Teddy,Mark,David,Kim,James,aaa,baa
(1 row)

SELECT wm_concat(name) FROM wm_concat_test GROUP BY id;
wm_concat
------------
Teddy,Mark
David
aaa
Allen,Kim
James
Paul,baa
(6 rows)

8.413. XML_IS_WELL_FORMED

用法:

xml_is_well_formed(text)

功能:

检查一个text串是不是一个良构的 XML,返回一个布尔结果。

如果xmloption配置参数被设置为DOCUMENT,xml_is_well_formed会做第一个函数的工作;

如果配置参数被设置为CONTENT,xml_is_well_formed会做第二个函数的工作。

这意味着xml_is_well_formed对于检查一个到类型xml的简单造型是否会成功非常有用

例子:

SELECT xml_is_well_formed('<abc/>');

8.414. XML_IS_WELL_FORMED_DOCUMENT

用法:

xml_is_well_formed_document(text)

功能:

检查一个text串是不是一个良构的 XML,返回一个布尔结果。xml_is_well_formed_document检查一个良构的文档.

对于检查XMLPARSE的对应变体是否会成功有用.

例子:

SELECT xml_is_well_formed_document('<pg:foo xmlns:pg="http://postgresql.org/stuff">bar</pg:foo>');

8.415. XML_IS_WELL_FORMED_CONTENT

用法:

xml_is_well_formed_content(text)

功能:

检查一个text串是不是一个良构的 XML,返回一个布尔结果。xml_is_well_formed_content检查良构的内容

对于检查XMLPARSE的对应变体是否会成功有用

例子:

SELECT xml_is_well_formed_content('<pg:foo xmlns:pg="http://postgresql.org/stuff">bar><</pg:foo>');

8.416. XMLAGG

用法:

XMLAGG(XMLType_instance [order_by_clause])

功能:

XMLAgg是一个聚合函数。它接受一组 XML 片段并返回一个聚合的 XML 文档。从结果中删除任何返回 null 的参数。

XMLAgg类似于,SYS_XMLAgg除了XMLAgg返回节点集合但不接受使用XMLFormat对象进行格式化。此外,XMLAgg不会将输出包含在标记元素SYS_XMLAgg中。

在 中order_by_clause,KingBase数据库不会像在此子句的其他用途中那样将数字文字解释为列位置,而只是将其解释为数字文字。

也可以看看:

XMLELEMENT和SYS_XMLAGG

例子:

以下示例生成一个Department元素,其中包含Employee具有员工职位 ID 和姓氏的元素作为元素的内容:

SELECT XMLELEMENT("Department",XMLAGG(XMLELEMENT("Employee", e.job_id||' '||e.last_name) ORDER BY last_name)) as "Dept_list" FROM employees e WHERE e.department_id = 30;

Dept_list

<Department>

  <Employee>PU_CLERK Baida</Employee>

  <Employee>PU_CLERK Colmenares</Employee>

  <Employee>PU_CLERK Himuro</Employee>

  <Employee>PU_CLERK Khoo</Employee>

  <Employee>PU_MAN Raphaely</Employee>

  <Employee>PU_CLERK Tobias</Employee>

</Department>

结果是单行,因为XMLAgg聚合了这些行。您可以使用该GROUP BY子句将返回的行集分组为多个组:

SELECT XMLELEMENT("Department",XMLAGG(XMLELEMENT("Employee", e.job_id||' '||e.last_name))) AS "Dept_list" FROM employees e GROUP BY e.department_id;

Dept_list

<Department>

  <Employee>AD_ASST Whalen</Employee>

</Department>

<Department>

  <Employee>MK_MAN Hartstein</Employee>

  <Employee>MK_REP Fay</Employee>

</Department>

<Department>

  <Employee>PU_MAN Raphaely</Employee>

  <Employee>PU_CLERK Khoo</Employee>

  <Employee>PU_CLERK Tobias</Employee>

  <Employee>PU_CLERK Baida</Employee>

  <Employee>PU_CLERK Colmenares</Employee>

  <Employee>PU_CLERK Himuro</Employee>

</Department>

8.417. XMLCOMMENT

用法:

XMLCOMMENT(values_expr)

功能:

XMLComment使用 的评估结果生成 XML 注释value_expr。value_expr必须解析为字符串。它不能包含两个连续的破折号(连字符)。函数返回的值采用以下形式:

<!--string-->

如果value_expr解析为 null,则该函数返回 null。

例子: 以下示例使用该DUAL表来说明XMLComment语法:

SELECT XMLCOMMENT('OrderAnalysisComp imported, reconfigured, disassembled' AS "XMLCOMMENT" FROM DUAL;

8.418. XMLCONCAT

用法:

XMLCONCAT(XMLType_instance [,...])

功能:

XMLConcat将一系列XMLType实例作为输入,连接每一行的一系列元素,并返回连接后的系列。XMLConcat是XMLSequence的倒数。

从结果中删除空表达式。如果所有值表达式都为 null,则该函数返回 null。

也可以看看: XML序列

例子: 以下示例为员工子集的名字和姓氏创建 XML 元素,然后连接并返回这些元素:

SELECT XMLCONCAT(XMLELEMENT("First", e.first_name),XMLELEMENT("Last", e.last_name)) AS "Result"FROM employees e WHERE e.employee_id > 202;

8.419. XMLELEMENT

用法:

XMLELEMENT([{ENTITYESCAPING|NOENTITYESCAPING}] {[NAME] identifier|EVALNAME value_expr} [, XML_attributes_clause] [,value_expr [[AS] c_alias]][,...])

XML_attributes_clause:
XML_ATTRIBUTES( [{ENTITYESCAPING|NOENTITYESCAPING}] [{SCHEMACHECK|NOSCHEMACHECK}] value [{[AS] c_alias| AS EVALINAME value_expr}] )

功能:

XMLElement获取元素名称identifier或评估元素名称EVALNAME value_expr、元素的可选属性集合以及构成元素内容的参数。它返回一个类型的实例XMLType。XMLElement类似于SYS_XMLGen,除了XMLElement可以在返回的 XML 中包含属性,但它不接受使用XMLFormat对象进行格式化。

该XMLElement函数通常嵌套以生成具有嵌套结构的 XML 文档,如下节中的示例所示。

您必须为 KingBase数据库指定一个值才能使用封闭标记。您可以通过指定identifier(字符串文字)或指定EVALNAME value_expr. 在后一种情况下,对值表达式求值,并将结果(必须是字符串文字)用作标识符。标识符不必是列名或列引用。它不能是表达式或空值。初始化参数最多可以有4000个字符,如果是MAX_STRING_SIZE = STANDARD32767个字符MAX_STRING_SIZE = EXTENDED。

构成元素内容的对象跟在XMLATTRIBUTES关键字后面。在 中XML_attributes_clause,如果value_expr为 null,则不会为该值表达式创建任何属性。的类型value_expr不能是对象类型或集合。如果为value_expr使用该AS子句指定别名,则如果初始化参数为 ,则 thec_alias或评估值表达式 ( EVALNAME value_expr) 最多可包含 4000 个字符,如果是 ,则最多可包含MAX_STRING_SIZE = STANDARD32767 个字符MAX_STRING_SIZE = EXTENDED。

也可以看看:

“扩展数据类型”了解更多信息MAX_STRING_SIZE

对于图 XML_attributes_clause中的选项value_expr:

  • 如果value_expr是标量表达式,则可以省略该AS子句,KingBase 使用列名作为元素名。

  • 如果value_expr是对象类型或集合,则该AS子句是强制性的,KingBase 使用指定c_alias的作为封闭标记。

  • 如果value_expr为 null,则不会为该值表达式创建任何元素。

也可以看看:

  • SYS_XMLGEN

例子: 以下示例Emp为一系列员工生成一个元素,其中包含提供员工姓名和雇用日期的嵌套元素:

 SELECT XMLELEMENT("Emp", XMLELEMENT("Name", e.job_id||' '||e.last_name),XMLELEMENT("Hiredate", e.hire_date)) as "Result" FROM employees e WHERE employee_id > 200;

Result

   <Emp>

     <Name>MK_MAN Hartstein</Name>

     <Hiredate>2004-02-17</Hiredate>

   </Emp>

   <Emp>

     <Name>MK_REP Fay</Name>

     <Hiredate>2005-08-17</Hiredate>

   </Emp>

   <Emp>

     <Name>HR_REP Mavris</Name>

     <Hiredate>2002-06-07</Hiredate>

   </Emp>

   <Emp>

     <Name>PR_REP Baer</Name>

     <Hiredate>2002-06-07</Hiredate>

   </Emp>

   <Emp>

     <Name>AC_MGR Higgins</Name>

     <Hiredate>2002-06-07</Hiredate>

   </Emp>

   <Emp>

     <Name>AC_ACCOUNT Gietz</Name>

     <Hiredate>2002-06-07</Hiredate>

   </Emp>

 选择了 6 行。

 以下类似示例使用XMLElement带有 的函数XML_attributes_clause来创建嵌套 XML 元素,其中包含顶级元素的属性值:

 SELECT XMLELEMENT("Emp",XMLATTRIBUTES(e.employee_id AS "ID", e.last_name),XMLELEMENT("Dept", e.department_id),XMLELEMENT("Salary", e.salary)) AS "Emp Element" FROM employees e WHERE e.employee_id = 206;

 Emp Element

   <Emp ID="206" LAST_NAME="Gietz">

   <Dept>110</Dept>

   <Salary>8300</Salary>

 </Emp>

 请注意,AS identifier没有为last_name列指定子句。因此,返回的 XML 使用列名last_name作为默认值。

 最后,下一个示例使用 中的子查询将XML_attributes_clause另一个表中的信息检索到元素的属性中:

 SELECT XMLELEMENT("Emp", XMLATTRIBUTES(e.employee_id, e.last_name),XMLELEMENT("Dept", XMLATTRIBUTES(e.department_id,(SELECT d.department_name FROM departments d WHERE d.department_id = e.department_id) as "Dept_name")),XMLELEMENT("salary", e.salary),XMLELEMENT("Hiredate", e.hire_date)) AS "Emp Element" FROM employees e WHERE employee_id = 205;


 Emp Element

   <Emp EMPLOYEE_ID="205" LAST_NAME="Higgins">

   <Dept DEPARTMENT_ID="110" Dept_name="Accounting"/>

   <salary>12008</salary>

   <Hiredate>2002-06-07</Hiredate>

 </Emp>

8.420. XMLEXISTS

用法:

XMLEXISTS(XQuery_string [XML_passing_clause])

XML_passing_clause:

    PASSING [BY VALUE ] expr [AS identifier] [, ... ]

功能:

XMLExists检查给定 XQuery 表达式是否返回非空 XQuery 序列。如果是,函数返回TRUE; 否则,它返回FALSE。该参数XQuery_string是一个文字字符串,但它可以包含您使用XML_passing_clause.

expr中的是XML_passing_clause一个表达式,它返回XMLType一个 SQL 标量数据类型或一个实例,用作评估 XQuery表达式的上下文。您只能expr在PASSING子句中指定一个而无需标识符。每个计算的结果都expr绑定到XQuery_string. 如果任何expr后面没有AS子句,则评估该表达式的结果将用作评估XQuery_string. 如果expr是关系列,则 KingBase XML DB 将忽略其声明的排序规则。

例子:

SELECT cit FROM CUSTOMER WHERE XMLEXISTS('$d//addr[city='tianjin']', passing info aa "d");

8.421. XMLFOREST

用法:

XMLFOREST(value_expr [as {c_alias|EVALINAME value_expr]}][,...])

功能:

XMLForest将其每个参数参数转换为 XML,然后返回一个 XML 片段,该片段是这些转换后的参数的串联。

  • 如果value_expr是标量表达式,则可以省略该AS子句,KingBase数据库使用列名作为元素名。

  • 如果value_expr是对象类型或集合,则该AS子句是强制性的,KingBase 使用指定的表达式作为封闭标记。

  • 您可以通过指定c_alias(字符串文字)或指定EVALNAME value_expr. 在后一种情况下,对值表达式求值,并将结果(必须是字符串文字)用作标识符。标识符不必是列名或列引用。它不能是表达式或空值。初始化参数最多可以有4000个字符,如果是MAX_STRING_SIZE = STANDARD32767个字符MAX_STRING_SIZE = EXTENDED。有关详细信息,请参阅“扩展数据类型”。

  • 如果value_expr为 null,则不为此创建任何元素value_expr。

例子: 以下示例Emp为员工子集创建一个元素,其中嵌套employee_id的last_name、 和salary元素作为Emp的内容:

SELECT XMLELEMENT("Emp", XMLFOREST(e.employee_id, e.last_name, e.salary))"Emp Element" FROM employees e WHERE employee_id = 204;

Emp Element

  <Emp>

    <EMPLOYEE_ID>204</EMPLOYEE_ID>

    <LAST_NAME>Baer</LAST_NAME>

    <SALARY>10000</SALARY>

  </Emp>

8.422. XMLPARSE

用法:

XMLPARSE({DOCUMENT|CONTENT} value_expr [WELLFORMED])

功能:

XMLParse从 的评估结果解析并生成一个 XML 实例value_expr。value_expr必须解析为字符串。如果value_expr解析为 null,则该函数返回 null。

  • 如果指定DOCUMENT,则value_expr必须解析为单根 XML 文档。

  • 如果您指定CONTENT,则value_expr必须解析为有效的 XML A

  • 当您指定 时WELLFORMED,您保证value_expr解析为格式正确的 XML 文档,因此数据库不会执行有效性检查以确保输入格式正确。

例子: 以下示例使用该DUAL表来说明 的语法XMLParse:

SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo="12435"> <customerName> Acme Enterprises</customerName><itemNo>32987457</itemNo></purchaseOrder>' WELLFORMED) AS PO FROM DUAL;

8.423. XMLPI

用法:

XMLPI({[NAME]idenfitier|EVALNAME value_expr} [, value_expr])

功能:

XMLPIidentifier使用和可选的评估结果生成 XML 处理指令value_expr。处理指令通常用于向应用程序提供与 XML 文档的全部或部分相关联的信息。应用程序使用处理指令来确定如何最好地处理 XML 文档。

您必须为 KingBase数据库指定一个值才能使用封闭标记。您可以通过指定identifier(字符串文字)或指定EVALNAME value_expr. 在后一种情况下,对值表达式求值,并将结果(必须是字符串文字)用作标识符。标识符不必是列名或列引用。它不能是表达式或空值。初始化参数最多可以有4000个字符,如果是MAX_STRING_SIZE = STANDARD32767个字符MAX_STRING_SIZE = EXTENDED。有关详细信息,请参阅“扩展数据类型”。

可选value_expr必须解析为字符串。如果省略 optional value_expr,则默认为零长度字符串。函数返回的值采用以下形式:

<?identifier string?>

XMLPI受以下限制:

  • identifier必须是处理指令的有效目标 。

  • 在任何情况下,您都不能为 指定xml 组合identifier。

  • identifier不能包含连续?>字符 。

例子: 以下语句使用该DUAL表来说明XMLPI语法的使用:

SELECT XMLPI(NAME "Order analysisComp", 'imported, reconfigured, disassembled') AS "XMLPI" FROM DUAL;

8.424. XMLROOT

注意: 该XMLROOT功能已弃用。它仍然支持向后兼容。但是,KingBase建议您改为使用XMLSERIALIZE带有版本号的 SQL/XML 函数。有关该函数 的更多信息,请参阅KingBase XML DB 开发人员指南。XMLSERIALIZE

用法:

XMLROOT(value_expr,VERSION {value_expr| NO VALUE} [,STANDALONE {YES|NO|NO VALUE}])

功能:

XMLROOT允许您通过在现有 XML 值的 XML 根信息 (prolog) 中提供版本和独立属性来创建新的 XML 值。如果value_expr已经有序言,则数据库返回错误。如果输入为空,则函数返回空。

返回的值采用以下形式:

<?xml version = "version" [ STANDALONE = "{yes | no}" ]?>

  • 第一个value_expr指定您为其提供序言信息的 XML 值。

  • 在VERSION子句中,value_expr必须解析为表示有效 XML 版本的字符串。如果您指定NO VALUEfor VERSION,则版本默认为 1.0。

  • 如果省略可选STANDALONE子句,或者使用 指定它NO VALUE,则函数返回的值中不存在独立属性。

例子: 以下语句使用该DUAL表来说明 的语法XMLROOT:

SELECT XMLROOT ( XMLType('<poid>143598</poid>'), VERSION '1.0', STANDALONE YES) AS "XMLROOT" FROM DUAL;

8.425. XMLSERIALIZE

用法:

XMLSERIALIZE({DOCUMENT|CONTENT} value_expr [AS datatype][ENCODING xml_encoding_spec][VERSION string_literal] [{NO INDENT|INDENT[SIZE=number]}] [{HIDE|SHOW} DEFAULTS])

功能:

XMLSerialize创建一个包含value_expr.返回的任何 lobXMLSERIALIZE都是只读的。

  • 如果指定DOCUMENT,则value_expr必须是有效的 XML 文档。

  • 如果指定CONTENT,则value_expr不需要是单根 XML 文档。但是,它必须是有效的 XML 内容。

  • 指定的datatype可以是字符串类型(VARCHAR或VARCHAR,但不是NVARCHAR)BLOB或CLOB。默认值为CLOB.

  • 如果datatype是BLOB,那么您可以指定ENCODING子句以在序言中使用指定的编码。这xml_encoding_spec是一个 XML 编码声明 ( encoding="...")。

  • 指定VERSION子句以使用您string_literal在 XML 声明 ( <?xml version="..." ...?>) 中提供的版本。

  • 指定NO INDENT从输出中去除所有无关紧要的空白。指定INDENT SIZE = N,其中N是一个整数,用于使用N空格的相对缩进进行漂亮打印的输出。如果N是0,那么漂亮打印在每个元素之后插入一个换行符,将每个元素单独放在一行上,但在输出中省略所有其他无关紧要的空格。如果INDENT在没有指定的情况下存在SIZE,则使用 2 空格缩进。如果省略此子句,则行为(是否漂亮打印)是不确定的。

  • HIDE DEFAULTS并且SHOW DEFAULTS仅适用于基于 XML 模式的数据。如果您指定SHOW DEFAULTS并且输入数据缺少 XML 架构为其定义默认值的任何可选元素或属性,则这些元素或属性将以其默认值包含在输出中。如果您指定HIDE DEFAULTS,则输出中不包含此类元素或属性。HIDE DEFAULTS是默认行为。

例子: 以下语句使用该DUAL表来说明 的语法XMLSerialize:

SELECT XMLSERIALIZE(CONTENT XMLTYPE('<Owner>Grandco</Owner>')) AS xmlserialize_doc FROM DUAL;

8.426. XMLTABLE

用法:

XMLTABLE([XML_namespaces_clause,] XQuery_string XMLTABLE_option)

XMLnamespaces_clause:

XMLNAMESPACES({[string AS identifier|DEFAULT sting]}[,...])

**注意:** 您最多可以指定一个DEFAULT string子句。

XMLTABLE_options:

[XML_passing_clause][RETURNING SEQUENCE BY REF][COLUMN XML_table_column [,...]]

XML_passing_clause:

PASSING [BY VALUE] (expr [ as indentifier ])[,...]

XML_table_column:

column {FOR ORDINALITY|{datatype|XMLTYPE[(SEQUNCE) BY REF ]}[PATH string][DEFALUT]}

功能:

XMLTable将 XQuery 评估的结果映射到相关的行和列。您可以使用 SQL 将函数返回的结果作为虚拟关系表进行查询。

  • 该XMLNAMESPACES子句包含一组 XML 名称空间声明。这些声明由计算行的 XQuery 表达式(求值的XQuery_string )和PATH字句中的XPath表达式引用XML_table_column,计算整个XMLTable函数的列,如果希望在COLUMNS字句的PATH表达式中使用限定名,则需要指定XMLNAMESPACES字句。

  • XQuery_string是一个文字字符串。它是一个完整的 XQuery 表达式,可以包含 prolog 声明。XQuery_string 的值用作 XMLTable 函数的输入;正是这个 XQuery 结果被分解并存储为关系数据。

  • expr中的是XML_passing_clause一个表达式,它返回XMLType一个 SQL 标量数据类型或一个实例,用作评估 XQuery 表达式的上下文。您只能expr在PASSING子句中指定一个而无需标识符。每个计算的结果都expr绑定到XQuery_string. 如果任何expr后面没有AS子句,则评估该表达式的结果将用作评估XQuery_string. 该子句仅支持按值传递,不支持按引用传递。因此,BY VALUE关键字是可选的,是为了语义清晰而提供的。

  • 可选RETURNING SEQUENCE BY REF子句导致 XQuery 评估的结果通过引用返回。XML_table_column这允许您在子句 中引用源数据的任何部分。

  • 如果省略此子句,则 XQuery 评估的结果将按值返回。也就是说,返回目标节点的副本而不是对实际节点的引用。在这种情况下,您不能在XML_table_column子句中引用不在返回副本中的任何数据。特别是,您不能引用源数据中目标节点之前的数据。

  • 可选COLUMNS子句定义要由创建的虚拟表的列XMLTable。

  • 如果省略该COLUMNS子句,则XMLTable返回一行,其中包含一个XMLType名为COLUMN_VALUE的伪列。

  • FOR ORDINALITY指定它column是一列生成的行号。最多只能有一个FOR ORDINALITY子句。它被创建为一NUMBER列。

  • 对于除列之外的每个结果列FOR ORDINALITY,您必须指定列数据类型,可以是XMLType或任何其他数据类型。

  • 如果列数据类型为XMLType,则指定XMLTYPE子句。如果您指定可选(SEQUENCE) BY REF子句,则对表达式所针对的源数据的引用将PATH作为列内容返回。否则,column包含该目标数据的副本。

  • XMLType通过引用返回数据可让您指定其他列,其路径以源数据中的节点为目标,这些节点在PATH列的表达式所针对的节点之外。

如果列数据类型是任何其他数据类型,则指定datatype.

  • 可选PATH子句指定由 XQuery 表达式字符串寻址的 XQuery 结果部分将用作列内容。

如果省略,则假定PATHXQuery 表达式。column例如:

XMLTable(... COLUMNS xyz)

相当于

XMLTable(... COLUMNS xyz PATH 'XYZ')

您可以使用不同PATH的子句将 XQuery 结果拆分为不同的虚拟表列。

可选DEFAULT子句指定当PATH表达式结果为空序列时要使用的值。它expr是一个 XQuery 表达式,经过计算以产生默认值。

例子: 以下示例将 XQuery '/Warehouse'应用于warehouses表的warehouse_spec列中的每个值的结果转换为一个包含Water和Rail的虚拟关系表:

SELECT warehouse_name warehouse,warehouse2."Water", warehouse2."Rail" FROM warehouses,XMLTABLE('/Warehouse' PASSING warehouses.warehouse_spec COLUMNS  "Water" varchar2(6) PATH 'WaterAccess',"Rail" varchar2(6) PATH 'RailAccess') warehouse2;

8.427. XPATH

用法:

xpath(xpath, xml [, nsarray])

功能:

函数xpath在 XML 值``xml``上计算 XPath 1.0 表达式 xpath (a text value)。它返回一个 XML 值的数组,该数组对应于该 XPath 表达式产生的结点集合。如果该 XPath 表达式返回一个标量值而不是一个结点集合,将会返回一个单一元素的数组。第二个参数必须是一个良构的 XML 文档,它必须有一个单一根结点元素。该函数可选的第三个参数是一个名字空间映射的数组。这个数组应该是一个二维text数组,其第二轴长度等于2(即它应该是一个数组的数组,其中每一个都由刚好两个元素组成)。每个数组项的第一个元素是名字空间的名称(别名),第二个元素是名字空间的 URI。并不要求在这个数组中提供的别名和在 XML 文档本身中使用的那些名字空间相同(换句话说,在 XML 文档中和在xpath函数环境中,别名都是本地的)。

例子:

SELECT xpath('/my:a/text()', '<my:a xmlns:my="http://example.com">test</my:a>', ARRAY[ARRAY['my', 'http://example.com']]);

要处理默认(匿名)命名空间,可以按使用下面的方法:

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

8.428. XPATH_EXISTS

用法:

xpath_exists(xpath, xml [, nsarray])

功能:

函数xpath_existsxpath函数的一种特殊形式。这个函数不是返回满足 XPath 1.0 表达式的单一 XML 值,它返回一个布尔值表示查询是否被满足(具体来说,它是否产生了空节点集以外的任何值)。这个函数等价于标准的 XMLEXISTS 谓词,不过它还提供了对一个名字空间映射参数的支持。

例子:

SELECT xpath_exists('/my:a/text()', '<my:a xmlns:my="http://example.com">test</my:a>', ARRAY[ARRAY['my', 'http://example.com']]);

8.429. YEAR

用法:

year(text)

功能:

抽取字符串中的 年份 字段

例子:

SELECT select year('2021-10-05');

8.430. 用户自定义函数

您可以使用 PL/SQL、Java 或 C 编写用户定义的函数,以提供 SQL 或 SQL 内置函数中不可用的功能。用户定义的函数可以出现在 SQL 语句中可能出现表达式的任何位置。

例如,用户定义的函数可用于以下情况:

  • SELECT语句 的选择列表

  • WHERE条款 的条件

  • CONNECT BY, START WITH, ORDER BY, 和GROUP BY子句

  • INSERT语句 的VALUES子句

  • UPDATE语句 的SET子句

笔记:KingBase SQL 不支持调用带有布尔参数或返回的函数。因此,如果您的用户定义函数将从 SQL 语句中调用,您必须将它们设计为返回数字(0 或 1)或字符串(' TRUE' 或 ' FALSE')。

用户定义函数:

 

可选表达式列表必须匹配函数、包或运算符的属性。

对用户定义函数的限制

DISTINCTandALL关键字仅对用户定义的聚合函数有效 。

也可以看看:

CREATE FUNCTION获取有关创建函数的信息,包括对用户定义函数的限制

先决条件

用户定义的函数必须创建为顶级函数或使用包规范声明,然后才能在 SQL 语句中命名。

要在 SQL 达式中使用用户函数,您必须拥有该用户函数或拥有EXECUTE该用户函数的权限。要查询使用用户函数定义的视图,您必须对视图具有READ或SELECT权限。从视图中选择不需要单独EXECUTE的权限。

也可以看看:

CREATE FUNCTION获取有关创建顶级函数的信息,CREATE PACKAGE获取有关指定打包函数的信息

名称优先级

在 SQL 语句中,数据库列的名称优先于不带参数的函数名称。例如,如果人力资源经理在hr架构中创建以下两个对象:

CREATE TABLE new_emps (new_sal NUMBER, ...);

CREATE FUNCTION new_sal RETURN NUMBER IS BEGIN ... END;

然后在以下两个语句中,对 的引用是new_sal指列new_emps.new_sal:

SELECT new_sal FROM new_emps;

SELECT new_emps.new_sal FROM new_emps;

要访问该功能new_sal,您将输入:

SELECT hr.new_sal FROM new_emps;

以下是 SQL 表达式中允许的对用户函数的一些示例调用:

circle_area (radius)

payroll.tax_rate (empno)

hr.employees.tax_rate (dependent, empno)@remote

例子:tax_rate要从schema调用user 函数hr,对ss_no和sal中的列执行它tax_table,指定以下内容:

SELECT hr.tax_rate (ss_no, sal) INTO income_tax FROM tax_table WHERE ss_no = tax_id;

该INTO子句是 PL/SQL,它允许您将结果放入变量income_tax中。

命名约定

如果只给出了一个可选的模式或包名,那么第一个标识符可以是模式名或包名。例如,判断是否PAYROLL在引用中PAYROLL。TAX_RATE是模式或包名称,KingBase 数据库按如下方式进行:

  • 检查PAYROLL当前架构中的包。

  • 如果PAYROLL未找到包,则查找PAYROLL包含顶级TAX_RATE函数的模式名称。如果没有找到这样的函数,则返回错误。

  • 如果PAYROLL在当前模式中找到包,则TAX_RATE在包中查找函数PAYROLL。如果没有找到这样的函数,则返回错误。

您还可以使用您为其定义的任何同义词来引用存储的顶级函数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值