我正在使用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(绿屏)上尝试时,它显示的消息是无效的SQL名称。是否可以使用冒号而不在名称中加引号。
答案 0 :(得分:1)
XML元素名称区分大小写...
XMLELEMENT(NAME cef, e.firstname)
得出<CEF>Charles</CEF>
XMLELEMENT(NAME "cef", e.firstname)
得出<cef>Charles</cef>
不一样。
: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
答案 1 :(得分:-1)
可以使用不带引号的名称。我已经通过创建示例验证了这一点。
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>
但是问题在于冒号的名称可以不带引号,也可以带引号。