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 必须声明标识符

WebParam 不允许使用 XmlElement 注释

C语言里两个冒号是啥意思?

使用 pl/sql 中的 xmlelement 获取所有关系表数据

oracle 里面 :加上变量名是啥意思?

在plsql中为null时是不是可以不显示xmlelement?