发布于 2019-01-29 17:05:29
数据库中的数据类型以及由SQL*Loader或ORACLE_LOADER驱动程序使用的数据类型是不同的。
Loader不知道VARCHAR2数据类型。它有一个VARCHAR类型,但该类型是不可移植的,这意味着它依赖于平台。
VARCHAR字段只能在短数据字段INT具有相同长度(以字节为单位)的系统之间加载正确的结果。如果系统之间的字节顺序不同,或者如果VARCHAR字段包含UTF16字符集中的数据,则使用适当的技术来指示长度子字段和数据的字节顺序。数据的字节顺序只是UTF16字符集的一个问题。
SQL*Loader的CHAR类型是可移植的。
可移植数据类型可移植数据类型分为值数据类型和长度值数据类型。可移植值数据类型如下: CHAR Datetime和VARCHARC图形外部数字外部(整数、浮点数、十进制、分区)原始可移植长度值数据类型如下:
使用非便携类型,您可能能够或可能无法在不同的平台上加载数据:
当要将在一个平台上创建的数据文件加载到另一个平台上时,数据必须以目标系统可以读取的形式写入。例如,如果源系统有一个使用16个字节的本地浮点表示,而目标系统的浮点数为12个字节,那么目标系统不能直接读取源系统上生成的数据。最好的解决方案是利用数据类型的自动转换,跨Oracle Net数据库链接加载数据。这是建议的方法,只要可行,就意味着SQL*Loader必须在源系统上运行。在本机数据类型中,通常会出现跨平台加载的问题。在某些情况下,可以通过填充零延长字段来避免问题,或者只读取字段的一部分以缩短字段(例如,在使用4字节整数的系统上读取8字节整数时,或者相反)。但是,请注意,不兼容的数据类型实现可能会阻止这一点。如果您不能使用Oracle Net数据库链接,并且在目标系统上运行的SQL*Loader必须访问数据文件,则建议只使用可移植的SQL*Loader数据类型(例如,CHAR、DATE、VARCHARC和数值外部)。
https://dba.stackexchange.com/questions/228376
复制相似问题