我需要从DB2导出的头/详细文件。所有字段都是固定长度的人类可读文本。记录由标题部分和可变长度细节部分组成。标题部分有15个字段。每个不同的细节部分都有自己的字段数,例如5到30个。最多有50种不同类型的细节部分,只有一个标题部分。文件的布局从标题部分开始,后跟n个细节部分。这被认为是一个记录。该文件可能有1亿条记录。
现在,数据存储在具有单个标题表和50个不同详细信息表的数据库中。
那么有一种简单的SQL方法可以做这样的事情吗?以下是记录和部件排列的可视化,而不是记录的外观(它们只是固定长度的字段文本):
HEADER REC, type = 1
DETAIL type 1
DETAIL type 1
...
HEADER REC, type = 27
DETAIL type 27
...
我想在概念上做一个SELECT * FROM HEADER,然后用SELECT * FROM DEATAIL进行交错。我不想将HEADER加入DETAIL和DETAIL实际上是50个不同的DETAIL表。其中HEADER.type - > DetailTableName。
答案 0 :(得分:0)
DB2的哪个平台和版本?
SQL并不真正支持您要执行的操作。事实上,你很难获得更多的反SQL。
你能做的最好的事情就是这样;
select rectype, HFLD1 concat HFLD2 <...> as DTA from HDR
UNION ALL
SELECT rectype, DFLD1 concat DFLD2 <...> as DTA from DTL1
UNION ALL
<....>
ORDER BY rectype
如果您碰巧使用DB2 for IBM i(又名AS / 400),您可以使用DDS创建多格式逻辑文件。使用EDTCDE或EDTWRD,您可以将数字字段重新定义为字符。我认为您可以简单地FTP生成的LF并以您需要的格式获取数据。
很长一段时间我不得不创建这样一个文件,这是一个非常古老的学校。那时候,我只是使用RPG创建一个带有单个大字符字段的PF文件。
今天,我将在单独的导出中发送标题/详细信息。作为奖励,导入也会更容易。