Help to improve a migration program

走远了吗. 提交于 2019-12-25 03:12:52

问题


We have 200+ views in Oracle that should be transfomed to 200+ flat files with fixed length fields.

Hoping to get ideas to do a better design of the following migration routine.

The prototype of migration program looks like this for the view named VIEWNAME1 (and are the same for other views in the prototype):

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

Currently we are using ODT (Oracle Developer Tools) for .Net with c#.

The mapping routine for each view:

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;
}

After writing the
10th private OneRow() function
and 10th private BuildFormat() function (one for each view in Oracle, the code smells).
And I know this can be done better and faster that would enable easier setup of new views, and handles changes easier.

Any suggestions are welcome.
Thanks.


回答1:


If the fixed lengths of the columns in the table match the lengths in the file, then you can generically query the user_tab_columns to see the column sizes. Then you could build your format automatically from the database metadata.




回答2:


I think that I'd automate the building of views on top of those views, based as Adam says on the metadata. Make each view a single column by converting all the fields to text (using explicit conversion for dates) and concatanating the fields together, and just dump that single column to a text file.



来源:https://stackoverflow.com/questions/1834790/help-to-improve-a-migration-program

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!