DBMSOUTPUT_LINESARRAY
はvarchar2のVARRAYなので、最初のクエリは問題ありません。 collect()
呼び出しは文字列のコレクションを取得し、それをDBMSOUTPUT_LINESARRAY
VARRAYコレクション型にキャストできます。
2番目のクエリでコレクションのコレクションを作成しようとしています。 As the documentation says:
columnがそれ自体がコレクションである場合、COLLECTの出力はコレクションのネストしたテーブルです。そのcollect()
呼び出しが作成しようとしている何
は、文字列のコレクションの集まりであり、それはDBMSOUTPUT_LINESARRAY
と同じタイプではありません。
create type demo_type as varray(100) of DBMSOUTPUT_LINESARRAY -- or as big as you need
/
そして、あなたはそれから行うことができます:あなた
はそれをサポートするために、独自のタイプを作成することができ
SELECT site, material, cast(collect(valueagg) as DEMO_TYPE) AS valueagg2
FROM table1_agg GROUP BY site, material;
SITE MA VALUEAGG2
------ -- ---------------------------------------------------------------------------------------------------------
AAKI01 HW MYSCHEMA.DEMO_TYPE(PUBLIC.DBMSOUTPUT_LINESARRAY('9362','10k','1st','USERS','8','100MW','2','V2','CELL'))
またはあなたの最初のクエリが2つの行を取得しますので、おそらく異なるlote
値でより明らかにすることをを示します。
select site, lote, material, cast(collect(value) as DBMSOUTPUT_LINESARRAY) AS valueagg
from table1 GROUP BY site, lote, material;
SITE LOTE MA VALUEAGG
------ ------- -- ----------------------------------------------------------------------------------------------------
AAKI01 0000443 HW SYS.DBMSOUTPUT_LINESARRAY('9362','8','100MW','2','V2','CELL')
AAKI01 0000444 HW SYS.DBMSOUTPUT_LINESARRAY('USERS','10k','1st')
SELECT site, material, cast(collect(valueagg) as DEMO_TYPE) AS valueagg2
FROM table1_agg GROUP BY site, material;
SITE MA VALUEAGG2
------ -- ---------------------------------------------------------------------------------------------------------------------------------------
AAKI01 HW MYSCHEMA.DEMO_TYPE(PUBLIC.DBMSOUTPUT_LINESARRAY('9362','8','100MW','2','V2','CELL'),PUBLIC.DBMSOUTPUT_LINESARRAY('USERS','10k','1st'))
私はあなたが本当に望んでいるかどうかはわかりません。私は両方の集計値の値を含む単一のコレクションが必要だと思う。それはそれらをネストを解除し、それらを再結合を意味します:
SELECT site, material, cast(collect(column_value) as DBMSOUTPUT_LINESARRAY) AS valueagg2
FROM table1_agg CROSS JOIN TABLE(valueagg) v
GROUP BY site, material;
SITE MA VALUEAGG2
------ -- ----------------------------------------------------------------------------------
AAKI01 HW SYS.DBMSOUTPUT_LINESARRAY('9362','1st','10k','USERS','CELL','V2','2','100MW','8')
あなたがマルチセットのために使用することはできませんVARRAY型を使用しているので、ただ、最初から生データと集計に戻る単純かもしれません操作。
( TABLE1 )サイト、LOTE BY GROUPからvalueagg ASいくつかのサンプルデータとDBMSOUTPUT_LINESARRAYとしてあなたのコード – Aleksej
選択サイト、LOTE、材料、キャスト(値)の関連部分)を投稿してください、材料 私が手 私は SELECTサイト、素材、table1_agg FROM valueagg2 ASキャストを(DBMSOUTPUT_LINESARRAYとして(valueagg)を収集)を行う。このオーバー AAKI01、0000443、HW、SYS.DBMSOUTPUT_LINESARRAY(9362 CELLのV2 2 100MW 8 USERS第一10K) GROUP BYサイト、品目 と私はエラーを取得 –