0

Oracleには200以上のビューがあり、固定長フィールドを持つ200以上のフラットファイルに変換する必要があります。

次の移行ルーチンのより良い設計を行うためのアイデアを得ることを望んでいます。

移行プログラムのプロトタイプは、VIEWNAME1という名前のビューでは次のようになります(プロトタイプの他のビューでも同じです)。

StronglyTypedDataSet views = new StronglyTypedDataSet();
ViewName1TableAdapter tableAdapter = new ViewName1TableAdapter();
tableAdapter.Fill(views.VIEWNAME1   );
mapFromViewToFlatFile(views.VIEWNAME1);

現在、C#を使用した.Net用のODT(Oracle Developer Tools)を使用しています。

各ビューのマッピングルーチン:

private void mapFromViewToFlatFile(DataTable table)
{
            StringBuilder format = BuildFormat();
            StringBuilder outBuf = new StringBuilder();
            foreach (views.VIEWNAME1Row row in table.Rows)
            {
                OneRow(outBuf, format, row);
            }
            SerializeToFile(outBuf, FILENAME);
}

private void OneRow(StringBuilder outBuf, StringBuilder format,views.VIEWNAME1Row row)
{
    outBuf.AppendFormat(format.ToString(),
                    row.COLUMNNAME1.Trim(),
                    row.IsCOLUMNNAME2Null() ? string.Empty : row.COLUMNNAME2.Trim()
     );
    OutBuf.AppendLine();
}


private StringBuilder BuildFormat()
{
        StringBuilder format = new StringBuilder();
        format.Append("{0,-14}");
        format.Append("{1,-36}");
        return format;
}

10番目のプライベートOneRow
()関数
と10番目のプライベートBuildFormat()関数(Oracleのビューごとに1つ、コードの臭い)を記述した後。
そして、これをより良く、より速く行うことができ、新しいビューのセットアップがより簡単になり、変更をより簡単に処理できることを私は知っています。

どんな提案でも大歓迎です。
ありがとう。

4

2 に答える 2

2

テーブル内の列の固定長がファイル内の長さと一致する場合は、一般的に をクエリしuser_tab_columnsて列のサイズを確認できます。次に、データベースのメタデータからフォーマットを自動的に構築できます。

于 2009-12-02T20:02:06.510 に答える
1

Adam がメタデータに基づいて言うように、これらのビューの上にビューの構築を自動化すると思います。すべてのフィールドをテキストに変換し (日付の明示的な変換を使用)、フィールドを連結して各ビューを 1 つの列にし、その 1 つの列をテキスト ファイルにダンプします。

于 2009-12-03T09:41:09.983 に答える