У меня есть запрос, который выводит VARRAY:
select
a.sdo_geom.sdo_elem_info
from
(
select
sdo_geometry('LINESTRING (1 2,3 4)') as sdo_geom
from
dual
) a
В SQL Developer VARRAY выводится как текст:
Вопрос:
Аналогично тому, что делает SQL Developer, есть ли способ преобразовать VARRAY в текст с помощью SQL, чтобы я мог конкатенировать значение в строке?
Пример: (не получается)
select
'MDSYS.SDO_ELEM_INFO_ARRAY(' || a.sdo_geom.sdo_elem_info || ')'
from
(
select
sdo_geometry('LINESTRING (1 2,3 4)') as sdo_geom
from
dual
) a
[Desired result: 'MDSYS.SDO_ELEM_INFO_ARRAY(1, 2, 1)']
ORA-00932: inconsistent datatypes: expected CHAR got MDSYS.SDO_ELEM_INFO_ARRAY
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
Error at Line: 2 Column: 37
Просто голова вверх:
DB<>FIDDLE, похоже, неправильно выводит VARRAYS. Он выводит пустой набор результатов, что может сбивать с толку. Возвращает значение/строку при выборе SDO_GEOMETRY
Вы можете использовать listagg
в подзапросе:
DBFiddle: https://dbfiddle.uk/?rdbms=oracle_21&fiddle=fa79482bb22501fd67fb2c498ff90bf9
select
(select listagg(column_value,',') from table(a.sdo_geom.sdo_elem_info)) cc
from
(
select
sdo_geometry('LINESTRING (1 2,3 4)') as sdo_geom
from
dual
) a
Чар Кол... :-D
Для моих заметок, для других атрибутов объекта SDO_GEOMETRY, таких как .sdo_ordinates
, мне нужно выяснить, правильно ли упорядочены ординаты или нет: "Я не уверен, что ваш упрощенный запрос сохраняет порядок ординат. Чтобы быть в безопасности, я бы определенно использовал предложение ORDER BY LISTAGG."
Здесь также мне любопытно узнать о фактической потребности бизнеса в этом.