0

我们在 Oracle 中有 200 多个视图,这些视图应该转换为 200 多个具有固定长度字段的平面文件。

希望得到想法来更好地设计以下迁移例程。

对于名为 VIEWNAME1 的视图,迁移程序的原型如下所示(对于原型中的其他视图也是如此):

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

目前,我们正在使用带有 c# 的 .Net 的 ODT(Oracle 开发人员工具)。

每个视图的映射例程:

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 中的每个视图一个,代码有味道)之后。
而且我知道这可以做得更好更快,这样可以更轻松地设置新视图,并更轻松地处理更改。

欢迎任何建议。
谢谢。

4

2 回答 2

2

如果表中列的固定长度与文件中的长度匹配,则您可以一般查询user_tab_columns以查看列大小。然后您可以从数据库元数据自动构建您的格式。

于 2009-12-02T20:02:06.510 回答
1

正如亚当所说的元数据,我认为我会在这些视图之上自动构建视图。通过将所有字段转换为文本(使用日期的显式转换)并将字段连接在一起,使每个视图成为单个列,然后将该单个列转储到文本文件中。

于 2009-12-03T09:41:09.983 回答