2

タスクは、変更可能なテーブルのリストを取得することです。

実行時にすべてのテーブル行を個々の csv ファイルに出力する PL/SQL を記述します。

したがって、5つのテーブルの場合。関連するテーブル データを含む 5 つの CSV ファイルを取得します。

CSV は | である必要があります。区切られ、各値が " で囲まれている (Excel に簡単にインポートするため)

私が知っているのはテーブルのリストだけです。

したがって、プロシージャの先頭でリストを配列にロードし、このリストをループして、UTL_FILE を使用して各行を 1 行ずつ出力します。

テーブルごとにカーソルが必要なのか、それともカーソルを動的に使用して各テーブルからの結果を格納できるのか、疑問に思っています。

ps 各ファイルには、最初の行として列見出しも含まれている必要があります。

それは可能ですか?30 を超えるテーブルのリストがあり、一部のテーブルには 200 を超える列があります。

だからアイデアをください:)。

これは無理だとゆっくり考える。すべての列名などを収集できる動的 SQL が必要なため、行き詰まっています。

SQL スクリプトではなく、単に出力をスプールすることはできません。やりたいことは、配列宣言からテーブルを追加または削除することだけです。

4

3 に答える 3

2

はい、可能です。一度に 1 つのテーブルに対してそれを行う方法を示すこのAsk Tomの質問を見てください。テーブル名の配列をループして、それぞれに対して Tom のプロシージャを呼び出すだけです。

于 2008-11-26T17:18:34.463 に答える
1

最初の Oracle は、アクセスできるビューにすべてのデータを格納します。

SELECT * FROM ALL_TAB_COLUMNS 

テーブルの列のリストを取得します。これにより、ファイルの列ヘッダーの作成が簡単になります。

あとは、データをフラット ファイルにアンロードするだけです。そのためのレシピはここにあります。

コードへの直接リンクは次のとおりです。

于 2008-11-26T17:15:51.163 に答える
0

いくつかのオプションがあります。

  1. UTL_FILE を使用して、フォーマット済みのテキスト文字列をファイルにダンプできます。区切り記号で連結されたすべてのデータ列を出力するカーソルを作成するだけです。

このようなもの:

DECLARE
  TYPE IDCurTyp IS REF CURSOR;
  fo            UTL_FILE.FILE_TYPE;
  varRow        VARCHAR2(4000);
  cur_output    IDCurTyp;
BEGIN
  fo := UTL_FILE.FOPEN('BILLING_DIR','BillingFile1.csv', 'W', 2000)
  OPEN cur_output FOR
    'SELECT ''"'' || t1.col1 || ''",'' || t1.col2 || ''","'' || t1.col2 || ''"'' FROM t1'
  LOOP
    FETCH cur_output INTO varRow;
    EXIT WHEN cur_output%NOTFOUND;
    UTL_FILE.putf( fo, '%s\n', varRow );
  END LOOP;

  CLOSE cur_output;

  UTL_FILE.FCLOSE( fo );
END:
  1. 書式設定済みのテキストの代わりに、SQL クエリを受け入れるパッケージを作成し、DBMS_SQL パッケージを使用してそれを解析し、列名などを抽出し、UTL_FILE を使用してもう一度ダンプするテキスト文字列を作成します。
于 2008-11-26T17:32:05.343 に答える