XMLELEMENT SQL 函数名是不是允许冒号
Posted
技术标签:
【中文标题】XMLELEMENT SQL 函数名是不是允许冒号【英文标题】:XMLELEMENT SQL Function name allows colon or notXMLELEMENT SQL 函数名是否允许冒号 【发布时间】:2018-07-19 13:40:23 【问题描述】:我正在使用 IBMi 7.3:DB2 for i SQL 参考。 XMLELEMENT 函数的文档是这样的:
XMLELEMENT ( NAME element-name ...
元素名称定义为:
NAME 元素名称 指定 XML 元素的名称。该名称是一个 SQL 标识符 必须采用 XML 限定名或 QName 的形式。请参阅 W3C XML 命名空间规范以获取有关有效名称的更多详细信息。如果名字是 限定,命名空间前缀必须在作用域内声明
到目前为止,我发现的示例(在 DB2 中我参考:https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzscaxmlelem.htm 和 DB2 LUW 参考https://www.ibm.com/support/knowledgecenter/en/SSEPGG_9.7.0/com.ibm.db2.luw.sql.ref.doc/doc/r0022188.html)总是在引号中指定元素名称。
例子:
SELECT E.EMPNO, E.FIRSTNME, E.LASTNAME,
XMLELEMENT(NAME "foo:Emp",
XMLNAMESPACES(’http://www.foo.com’ AS "foo"),
XMLATTRIBUTES(E.EMPNO AS "serial"),
E.FIRSTNME, E.LASTNAME
OPTION EMPTY ON NULL) AS "Result"
FROM SESSION.CANDIDATES E
没有明确提到它可以不带引号。还有显示在名称中使用冒号的示例。但是当我在 IBM i(绿屏)上尝试时,它显示 Invalid SQL Name 的消息。是否可以在名称中使用不带引号的冒号。
【问题讨论】:
您的链接是 Db2 for LUW docs,而不是 Db2 for IBM i.. 是的,链接是 Db2 LUW 的,我在那里找到了 XMLELEMENT 的示例,这就是我提到它的原因。 我的答案有一个指向我从中提取示例的 Db2 i 文档的链接... 【参考方案1】:XML 元素名称区分大小写...
XMLELEMENT(NAME cef, e.firstname)
结果为@987654323@
XMLELEMENT(NAME "cef", e.firstname)
结果为@987654325@
哪些不一样。
:CITY
中的冒号仅适用于嵌入在 RPGLE 或其他语言中的 SQL。
我不相信元素名称中可以有冒号,除非你使用命名空间,在这种情况下你需要引号。
来自docs
SELECT E.EMPNO, E.FIRSTNME, E.LASTNAME,
XMLELEMENT(NAME "foo:Emp"
, XMLNAMESPACES(’http://www.foo.com’ AS "foo")
, XMLATTRIBUTES(E.EMPNO AS "serial")
, E.FIRSTNME, E.LASTNAME
OPTION NULL ON NULL) AS "Result"
FROM SESSION.CANDIDATES E
【讨论】:
感谢@Charles 的回答。【参考方案2】:可以使用不带引号的名称。我通过创建一个示例验证了这一点。
SELECT XMLSERIALIZE(
XMLCONCAT(
XMLELEMENT(NAME cef, e.firstname),
XMLELEMENT(NAME "last", e.lastname)
) AS VARCHAR(100) ) AS "result"
FROM ABHTEST.EMPLOYEE E
这导致:
<CEF>Abhishek </CEF><last>Tiwari </last>
将 cef 放在引号中时,结果如下:
<cef>Abhishek </cef><last>Tiwari </last>
但问题是名称中允许冒号不带引号或带引号。
【讨论】:
以上是关于XMLELEMENT SQL 函数名是不是允许冒号的主要内容,如果未能解决你的问题,请参考以下文章
PL/SQL 函数中的 XmlRoot、XmlElement、InsertChildXml 给出 PLS-00201 必须声明标识符