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
-,


OracleでLISTAGG関数を使ったら、世界が変わった話。 | へ返信する コメントをキャンセル

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

関連記事

ORACLEでSPOOL処理の高速化を試す

ORACLEでSPOOL処理の高速化を考えてみた 事の発端は、お客様のお怒りでした・・・ なんで、お客さんに最新版のリリース時には、必ずスキーマ間の比較をすることを徹底しろと言われてしまったと。 まぁ …

[ORACLE]ORA-12514:TNS 指定された接続識別子を解決できませんでした のエラー対処法

ORA-12514 ORA-12514: TNS:listener does not currently know of service requested in connect descriptor …

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

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

ORACLEのMERGE INTOで、UPDATEは出来るのに、INSERTできない

最近、Oracleのエラーの話しか書いてない気がするw     便利というか、トランザクション内の処理も1つで済むので、MERGE INTO文を使うことがあります。 実際、 新規デ …

[ORACLE]Oracleに接続できない時に確認すること

Oracleを新しくインストールした時に、中々接続できなかったので、その時に確認しておくべき事項のまとめ。 少なくとも、これは先にやっておいた方がいいこととか。 前提条件 前提と書くとものものしいけど …


カテゴリー