我正在尝试从磁带文件到驻留在Oracle数据库中的表中输入少量记录。我试图在控制文件的帮助下做到这一点。
但是,在磁带文件中,很少有空间以主键属性为目标。在迁移记录时,加载程序将这些空格视为NULL并因此抛出错误。
有没有办法将空格插入主键属性?
提前致谢!
答案 0 :(得分:1)
根据定义,主键不能为空。所以不,你不能加载一个空值的记录。您需要找到一种在加载时将唯一值放入该字段的方法。因此,常量不是一个选项,因为它只能用于一个记录,因为主键的唯一性因素。
为此,有选择。您可以创建一个与目标结构相同但没有主键的临时表,首先加载到该表,然后将有效记录传输到表中,然后找出如何处理坏行。
或者,如果密钥是基于数字的,那么只要您不使用SQL * Loader直接选项,就可以向该表添加一个插入触发器,该触发器在该字段中检查空值并将其设置为如果为null,则为value。序列通常用于此,但在您的实例中,您需要测试与现有键值的冲突(例如,创建一个序列,其开始的范围远远高于数据源中的任何值)。尽管如此,如果源系统最终复制了您创建的密钥,则可能会遇到未来冲突的风险,并且它会破坏根据ID将目标记录追溯到源的任何能力。