У меня проблемы с использованием XMLAGG и получением ORA-22275: указан неверный локатор больших объектов - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть таблица в Oracle и я работаю в SQL Developer, и я пытаюсь получить все строки в строке XML, но когда я пытаюсь сделать это в одной строке с XMLAGG, я получаю исключение ORA-22275: недействительноУказан локатор больших объектов.

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

Это для Oracle 11 DB

Попробуйте 1 SELECT XMLElement ("employee", XMLAgg (XMLElement ("Employee", e.nomina || '').|| e.empresa) ORDER BY e.nomina)) AS "Dept_list" FROM empleados e;

Попробуйте 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

1 Ответ

0 голосов
/ 08 февраля 2019

В попытке 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 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...