Oracle SQL加载程序位置

Oracle SQL加载程序位置,oracle,sql-loader,Oracle,Sql Loader,SQL加载器新手,我对位置有点困惑。 让我们使用以下示例数据作为参考: Munising 49862 MI Shingleton49884 MI Seney 49883 MI 下面是load语句: LOAD DATA INFILE 'zipcodes.dat' REPLACE INTO TABLE zipcodes ( city_name POSITION(1) CHAR(10), zip_code POSITION(*) CHAR(5),

SQL加载器新手,我对
位置有点困惑。
让我们使用以下示例数据作为参考:

Munising  49862 MI
Shingleton49884 MI
Seney     49883 MI
下面是
load
语句:

LOAD DATA
   INFILE 'zipcodes.dat'
   REPLACE INTO TABLE zipcodes (
      city_name POSITION(1) CHAR(10),
      zip_code POSITION(*) CHAR(5),
      state_abbr POSITION(*+1) CHAR(2)
      )
在load语句中,
city\u name
位置为1。SQLLDR如何知道它的终点?CHAR(10)是这里的诀窍吗?计算“Munising”后面的两个空格,它有10个字符

还有,为什么
zip_code
会被赋予CHAR,即使它只包含数字


谢谢

是的,当未指定结束位置时,它是从数据类型派生的。这就解释了POSITION子句

  • 城市名称位置(1)字符(10)

    此处数据字段的起始位置为1。未指定结束位置,但从数据类型(即10)派生

  • 邮政编码位置(*)字符(5)

    此处*指定,数据字段紧跟在前一个字段之后,长度应为5字节

  • 州缩写位置(*+1)字符(2)

    此处+1指定与上一个字段的偏移量。Sqlloader跳过1个字节,然后读取从char(2)数据类型派生的下2个字节

至于zipcode为什么是CHAR,邮政编码被认为只是一个固定长度的字符串。你不会对它做任何算术运算。因此,CHAR是合适的。
还有,看一看。在控制文件中,您告诉SQL*Loader如何解释数据。它可以不同于表结构。在此示例中,您还可以为邮政编码指定外部整数。

我们需要三个文本文件和一个批处理文件来加载数据:
假设您的文件位置为“D:\loaddata”
输入文件“D:\loaddata\abc.CSV”
1.D:\loaddata\abc.bad--空
2.D:\loaddata\abc.log--空
3.D:\loaddata\abc.ctl“在下面编写代码”

  • D:\loaddata\abc.bat---用于执行

     sqlldr db_user/db_passward@your_tns control=D:\loaddata\abc.ctl log=D:\loaddata\abc.log
    
    双击“D:\loaddata\abc.bat”文件后,数据将加载到oracle表中。如果有任何错误,请检查“D:\loaddata\abc.bad”和“D:\loaddata\abc.log”文件

  •  sqlldr db_user/db_passward@your_tns control=D:\loaddata\abc.ctl log=D:\loaddata\abc.log