在 Oracle 18c 的 db<>fiddle 中:
如果我選擇一個可變陣列,那么 db<>fiddle 回傳一個空的結果集,這是一種誤導。
with data as (select sys.odcivarchar2list('a', 'b', 'c') as my_array from dual)
select my_array from data
Result:
MY_ARRAY
-------- [resultset is empty]
db<>小提琴
@JackDouglas 在相關帖子中說:
PHP 的oci_fetch_all不喜歡像 SDO_GEOMETRY 這樣的抽象資料型別,我在日志中收到這樣的錯誤:
PHP Warning: oci_fetch_all(): ORA-00932: inconsistent datatypes: expected CHAR got ADT PHP Warning: oci_fetch_all(): ORA-00932: inconsistent datatypes: expected CHAR got ADT來源:選擇 SDO_GEOMETRY 時回傳一個值/行
作為一種解決方法,我想將 varray 的值作為連接的文本串列回傳(與 SQL Developer 中的作業方式相同)。
像這樣:
with data as (select sys.odcivarchar2list('a', 'b', 'c') as my_array from dual)
select varray_list(my_array) from data
-- ?? A fake function.
Result:
MY_ARRAY
--------
SYS.ODCIVARCHAR2LIST('a', 'b', 'c')
--or
'a', 'b', 'c'
--or
a,b,c
問題:
在查詢中,有沒有辦法將 varray 的值作為連接文本串列獲取?
uj5u.com熱心網友回復:
LATERAL加入一個表集合運算式,然后使用LISTAGG:
with data (my_array) as (
select sys.odcivarchar2list('a', 'b', 'c') from dual union all
select sys.odcivarchar2list('d', 'e') from dual
)
select s.my_array_str
from data d
CROSS JOIN LATERAL (
SELECT LISTAGG(column_value, ',') WITHIN GROUP (ORDER BY ROWNUM)
AS my_array_str
FROM TABLE(d.my_array)
) s
哪個輸出:
MY_ARRAY_STR a,b,c d,e
或者,如果您想要周圍的引號:
with data (my_array) as (
select sys.odcivarchar2list('a', 'b', 'c') from dual union all
select sys.odcivarchar2list('d', 'e') from dual union all
select sys.odcivarchar2list('f', NULL, 'g') from dual
)
select s.my_array_str
from data d
CROSS JOIN LATERAL (
SELECT LISTAGG(
'''' || column_value || '''',
','
) WITHIN GROUP (ORDER BY ROWNUM)
AS my_array_str
FROM TABLE(d.my_array)
) s
哪個輸出:
MY_ARRAY_STR 'a','b','c' 'd','e' 'f','','g'
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/494505.html
