【问题标题】:I'm having trouble using XMLAGG and getting ORA-22275: invalid LOB locator specified我在使用 XMLAGG 和获取 ORA-22275 时遇到问题:指定了无效的 LOB 定位器
【发布时间】:2019-07-02 08:28:34
【问题描述】:

我在 oracle 中有一个表并在 SQL Developer 中工作,我正在尝试获取 xml 字符串中的所有行但是当我尝试使用 XMLAGG 在单行中执行此操作时出现异常 ORA-22275: 指定了无效的 LOB 定位器。

+------------------+
| empleados        |
+------------------+
| nomina | empresa |
+--------+---------+
| 212121 | 31      |
+--------+---------+
| 212122 | 32      |
+--------+---------+
| 212123 | 33      |
+--------+---------+

这是针对 Oracle 11 数据库的

试试 1 选择 XMLElement("员工", XMLAgg (XMLElement("Employee",e.nomina||' '||e.empresa)ORDER BY 名义上的 )) 作为“部门列表” FROM 员工;

试试 2

SELECT XMLROOT(
        XMLELEMENT("employees",
          XMLAGG(
            XMLELEMENT("employee",
              XMLFOREST(
                e.nomina AS "nomina",
                e.empresa AS "empresa")
            )
          )
        )
      ) 
      AS employees
FROM   empleados e;

我期望像

这样的字符串
<employees>
   <employee>
      <nomina>212121</nomina>
      <empresa>21</empresa>
   </employee>
   <employee>
      <nomina>212122</nomina>
      <empresa>22</empresa>
   </employee>
   <employee>
      <nomina>212123</nomina>
      <empresa>23</empresa>
   </employee>
</employees>

但我不断得到

ORA-22275: invalid LOB locator specified

【问题讨论】:

    标签: sql xml oracle


    【解决方案1】:

    在尝试 2 中,您必须向 xmlroot(xmltype,版本 1)再添加一个参数。 可能主要问题出在“sql developer”中。缺少 java 库或 xmltype 的疯狂转换。

    试试这个

    xmlserialize(document
            XMLELEMENT("employees",
              XMLAGG(
                XMLELEMENT("employee",
                  XMLFOREST(
                    e.object_id AS "nomina",
                    e.object_type AS "empresa")
                )
              )
            )
         as clob indent size = 2)
          AS employees ...
    

    或作为 varchar

    xmlserialize(document
            XMLELEMENT("employees",
              XMLAGG(
                XMLELEMENT("employee",
                  XMLFOREST(
                    e.object_id AS "nomina",
                    e.object_type AS "empresa")
                )
              )
            )
         as varchar2(4000) indent size = 2)
          AS employees ...
    

    【讨论】:

      猜你喜欢
      • 2016-02-17
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多