如何使用sql loader获取变量值并在DB列中更新

时间:2015-04-15 08:57:50

标签: oracle sql-loader

我有一个文本文件,第一行作为标题记录,其余行是详细信息。对于处理,我不需要存储头记录的字段,但我需要来自此头记录的日期字段,并作为oracle记录行中的详细记录的一部分存储。我正在使用所有行提取所有行的详细信息' POSITION'因为文件是固定长度的

是否可以在sql loader控制文件中定义一个变量来存储我在内存中需要的值,然后在我通过sql loader控制文件执行sql insert时使用它

我的数据文件如下:

193049201209109009238 anjdjtk (Header Record)
1231232 1231386 bkadfjak 989039nnadfsafda(details)
1335635 1237657 lsafnre  234o9034590srgfs(details)

我需要从标题记录中提取位置(7:14)并在Oracle DB中使用此值更新a列

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

简而言之,答案是否定的。我可以考虑一些替代方案。

  • 编写PL / SQL程序而不是使用SQL * Loader。读取每一行,从标题中保存日期,插入详细记录。

  • 将数据库设计更改为具有详细信息表的标头表,然后使用多个INTO TABLE子句以及WITH子句(假设有某种方法可以将行标识为标题行)以插入适当的表,如果没有其他可以使用的标识列,则使用序列值作为连接键。

  • 在您的环境中预处理文件以从标题行获取日期并将其添加到详细信息行的前面,然后使用SQL * Loader将日期指定为控制文件中的第一列(跳过然后加载标题行。

  • 将所有行加载到临时表中,并在加载后运行PL / SQL过程,该过程将从标题行获取日期并使用它将其写入到详细信息行中。主表(有点像第一种选择)。

让我们知道你的想法。