将 VARRAY 转换为文本(用于串联)
Convert VARRAY to text (for concatenation)
我有一个输出 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 开发人员所做的类似,有没有一种方法可以使用 SQL 将 VARRAY 转换为文本——这样我就可以将值连接成一个字符串?
示例:(失败)
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。它输出一个空的结果集,这可能会造成混淆。 Return a value/row when selecting 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
我有一个输出 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 开发人员所做的类似,有没有一种方法可以使用 SQL 将 VARRAY 转换为文本——这样我就可以将值连接成一个字符串?
示例:(失败)
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。它输出一个空的结果集,这可能会造成混淆。 Return a value/row when selecting 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