2012-03-28 85 views
0

我正在尝试从磁带文件中输入几条记录到驻留在Oracle数据库中的表中。我正试图在控制文件的帮助下做到这一点。
但是,在磁带文件中几乎没有针对主键属性的空格。在迁移记录的同时,加载器将这些空间视为NULL,从而引发错误。

有没有办法将空格插入主键属性?
如何允许分配为主键的属性中的空格?

在此先感谢!

+1

主键列是VARCHAR2类型吗? – Ollie 2012-03-28 13:42:06

+0

是否在控制文件中尝试了CONSTANT关键字? – tbone 2012-03-28 13:44:23

+0

谢谢...我得到了解决方案。我在控制文件中添加了PRESERVE BLANKS关键字,然后空白被接受。 – 2012-03-28 15:31:20

回答

1

根据定义,主键不能为空。所以不,你无法加载一个空值的记录。您需要找到一种方法在加载时向该字段中添加唯一值。所以常数不是一个选项,因为它只适用于一个记录,因为主键的唯一性因素。

对此,有选项。您可以创建一个与目标结构相同但没有主键的临时表,然后先将该表加载到该表中,然后将有效记录传输到表中,并找出稍后处理坏行的方法。

或者,如果密钥是基于数字的,那么只要您没有使用SQL * Loader direct选项,您可以将插入触发器添加到该表中,该表检查该字段中的空值并将其设置为一个值,如果它为空。序列通常用于此目的,但在您的实例中,您需要测试是否存在与现有键值冲突(例如,创建的序列的起始范围远远高于数据源中的任何值)。尽管如此,如果源系统最终复制了您创建的密钥,并且它打破了基于该ID从目标跟踪记录返回到源的任何能力,那么您仍然有可能遇到将来的冲突。

+0

谢谢......我得到了解决方案。我在控制文件中添加了PRESERVE BLANKS关键字,然后空白被接受。 – 2012-03-28 15:30:57