OracleでLISTAGG関数を使ったけど、世界を変えられなかった話・・・

投稿日:2017-05-13

OracleでLISTAGG関数を使ったら、世界が変わった話。


はい、休日出勤でした。
そして、休日出勤の結果、以下のことが分かりました(泣

の後日談というか、結局駄目でしたっていう話。

原因は調べ切れてないけど、連結したテーブルの項目が表示できなかったので、最終的に取得後に件数分のループを回して必要な文字列を構成するという手段を取らざるを得なかった。ぐぬぬ・・・

a a1
a a2
a a3
a a4
:

こんな出力を

a a1,a2,a3,a4..
※この例では、「,」を区切り文字にしてます。

こんな風に表示を出来てて当初問題なかったんですが、実際に必要とする出力結果では、
「a a1」
では無く、
「あ a1」※「あ」は「a」に対応するマスタの名称
とする必要があったわけ。

そのため、前回書いたようにこう書くのではなく・・・

select
seq
,listagg(t_seq.name ,',') within group (order by t_seq.name ) as name
from
t_seq
group by
seq
;
※この例では、「,」を区切り文字にしてます。

こう書く必要があるわけです。

SELECT
seq
,LISTAGG(m_data.name ,',') WITHIN GROUP (ORDER BY m_data.name ) AS name
FROM
t_seq
LEFT JOIN m_data
ON  t_seq.seq = m_data.seq
GROUP BY
seq
;
※この例では、「,」を区切り文字にしてます。

で、このとき、出力結果が正しく表示されなくなったんです。
SQLの使用環境によるかもしれませんが、sqldeveloperで実行しても正しく表示できなかったので今回は使用を見送ることにしました。
実行環境に左右される状況では、ちょっと使えなかった。
ただ、テーブルの連結をしていても、連結したテーブルの項目を使わなければ表示は問題なかったので、原因が分かったら積極的に使って行きたいなと。







-ORACLE
-,


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

[ORACLE]今接続しているサーバー・スキーマとかを確認する

Oracle使ってる時に、今どのサーバーに繋いでるの?とか、今どのスキーマに繋いでるの? ってなるとき無いですか? そんなときの確認法。 今、どのサーバーに接続してるんだ? 先日の仮想マシンにOrac …

Oracleで「ORA-00918: 列の定義が不明瞭です 」のエラーの解決法と発生理由

発生したエラー ORA-00918: 列の定義が不明瞭です 原因 原因は、同じ列名やテーブルの別名を使用していること。 解決方法 Select句で羅列している列に同一の列名(別テーブル)があれば、as …

no image

OracleでLISTAGG関数を使ったら、世界が変わった話。

11gR2からGROUP_CONCAT(複数行をまとめて1列に)が可能に http://d.hatena.ne.jp/kkz_tech/20150311/1426048592 日本の中心付近で仕様変更 …

ORACLEでCASE文を使用した時にORA-00932のエラーが出る

割と悩んだ・・・ 原因は、CASE文で使用している項目のデータ型が異なるのが原因みたいだけど、正直、ぴんと来てない現実w select case name when ‘A’ then ‘あ’ when …

[Oracle]破棄されたオブジェクトにアクセスできません。 オブジェクト名 ‘oracleconnection’ です。

破棄されたオブジェクトにアクセスできません。 オブジェクト名 ‘oracleconnection’ です。 破棄されたオブジェクトかどうかの判断(MSDK) MSDNでも破棄さ …


カテゴリー