OracleデータベースでSQLを使用しています。別のプログラムで分析するためにデータを抽出するために必要なテーブルがいくつかあります。私はこのプロセスを効率的に実装しようとしています。複数のテーブルの内容を出力する
最終生成物は.CSV形式ファイル、たとえば次のようになります。これらのクエリを使用して
TableName1, Data1, Data2, Data3
TableName1, Data1, Data2, Data3
TableName2, Data1, Data2, Data3, Data4
TableName2, Data1, Data2, Data3, Data4
TableName3, Data1, Data2
など
私はそれを使用することができますので、私は私が必要とするデータとフィールドの数を取得しますforループ可能に:私は失われています
SELECT * FROM MY_TABLE_NAME
SELECT count(column_name) FROM all_tab_cols WHERE table_name = 'MY_TABLE_NAME'
はかかわらず、ブロックにこれを変換する方法です。将来このコードを実行する必要があるので、必要に応じて後でテーブルを追加したり削除したりすることができるように、最初は配列を各テーブルの名前で記述することができます。各テーブルには、フィールドごとに異なる数のフィールドとデータ型もあります。私が今まで試みてきたアプローチはすべて、DEFINEブロックにこれらのそれぞれを明示的に記述する必要がありますが、これは実現不可能です。これらのデータセットを動的にループする最良の方法は何ですか?
誰かが次にどこへ向かうべき正しい方向に向けることができますか?
フィールド名の列を取得し、それらを連結するためのチャンピオンのように機能します。パスワードは「tiger」です。しかし、私はそれをアルファベット順に並べ替えるように見えます。どのように構造を維持するのですか?たとえば、自分のフィールドが 'B'、 'C'、 'A'のようにレイアウトされている場合、それらをLISTAGGで 'A、B、C'にどのように並べ替えるのですか? – SandPiper
アルファベット順ではありません(BONUSテーブルの最後のものとしてCOMMを参照してください)。私は答えて説明しました:注文は、USER_TAB_COLUMNSテーブルのCOLUMN_IDによるものです。 SELECT * FROM文を実行した場合に表示される順序と同じです。 –
mathguy
ああ!私はその行を逃した、私の謝罪。ありがとう、チャンピオンのように働いた。 – SandPiper