Oracle データベースでテーブルの列をカンマ区切りで表示したいことがあると思います。そんなときはデータディクショナリ USER_TAB_COLUMNS と Oracle 11g R2 以降で使用可能になった LISTAGG 関数を使用しましょう。
例えばこれで SQL*Loader のコントロールファイルに、コピペができるようになりますね。
次の SQL を実行すればすべてのテーブルの名称と列名が一気に表示されます。
SELECT TABLE_NAME, LISTAGG(COLUMN_NAME, ',') WITHIN GROUP (ORDER BY COLUMN_ID) AS COLUMN_NAMES FROM USER_TAB_COLUMNS GROUP BY TABLE_NAME;
次のような DDL で作られたテーブルだと・・・
CREATE TABLE PERSON (
NAME VARCHAR2(20),
AGE NUMERIC,
ADDRESS VARCHAR2(50),
GENDER CHAR(1),
HOBY VARCHAR2(50)
);
次のような結果になるでしょう。
TABLE_NAME | COLUMN_NAMES |
---|---|
PERSON | NAME,AGE,ADDRESS,GENDER,HOBY |