首页 > 解决方案 > XMLELEMENT SQL 函数名是否允许冒号

问题描述

我正在使用 IBMi 7.3:DB2 for i SQL 参考。XMLELEMENT 函数的文档是这样的:

XMLELEMENT ( NAME element-name ...

元素名称定义为:

NAME element-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的消息。是否可以在名称中使用不带引号的冒号。

标签: sqlxmldb2

解决方案


XML 元素名称区分大小写...

XMLELEMENT(NAME cef, e.firstname)

结果是<CEF>Charles</CEF>

XMLELEMENT(NAME "cef", e.firstname)

结果是<cef>Charles</cef>

哪些不一样。

中的冒号:CITY仅适用于嵌入在 RPGLE 或其他语言中的 SQL。

我不相信你可以在元素名称中使用冒号,除非你使用命名空间,在这种情况下你需要引号。

文档

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

推荐阅读