XMLELEMENT SQL函数名称是否允许冒号

时间:2018-07-19 13:40:24

标签: sql xml db2

我正在使用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名称。是否可以使用冒号而不在名称中加引号。

2 个答案:

答案 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>

但是问题在于冒号的名称可以不带引号,也可以带引号。