【问题标题】:How to set primary key in sqlldr ctl file?如何在 sqlldr ctl 文件中设置主键?
【发布时间】:2021-10-01 20:49:13
【问题描述】:

这里有下面的文件

load data
infile 'emp.csv'
into table EMPLOYEES
append
fields terminated by ',' 
optionally ENCLOSED BY '"'
TRAILING NULLCOLS
(
TENANTID,
EMPLOYEEID,
ISEMPLOYEEACTIVE,
PASSWORD,
EMPLOYEEMANAGERID,
FIRSTNAME,
LASTNAME,
MIDDLENAME,
EMPLOYEEEMAILID,
EMPLOYEEASSISTANTID ,
CATEGORYID,
EMPLOYEENATIONALITY,
BRANCHID ,
GRADEID ,
PASSWORDRESETTOKEN,
PASSWORDRESETCREATEDATE,
ISBRANCHHEAD ,
DEFAULTCOSTCODE ,
GENDER 
)

在这个文件中EMPLOYEEID 是主键,所以如何将该列设置为主键... 因为每次它都需要唯一且自动生成的数字

这里是我的 emp.csv 文件

1006,1,0,saasas,1049,LoadData,lol,lol,bhargav121@gmail.com,1049,1125,India,2192,1128,1,1,1,1051,m

【问题讨论】:

    标签: java sql oracle sql-loader


    【解决方案1】:

    在数据库中。 create sequence EMPLOYEES_SEQ

    在 ctlfile 中

    ...
    TENANTID,
    EMPLOYEEID "EMPLOYEES_SEQ.NEXTVAL",
    ISEMPLOYEEACTIVE,
    ...
    

    【讨论】:

      【解决方案2】:

      我们还可以维护一个数据类型为NUMBER 和约束GENERATED BY DEFAULT AS IDENTITY 的列。这样在加载时,默认情况下会插入每行递增的唯一数字标识符。

      鸡蛋:

      CREATE TABLE members(
          member_id **NUMBER** **GENERATED BY DEFAULT AS IDENTITY**,
          first_name VARCHAR2(50),
          last_name VARCHAR2(50),
          PRIMARY KEY(member_id)
      );
      

      对于通过 sql loader 加载时跳过字段/列,请访问here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        • 1970-01-01
        • 2011-12-04
        • 2018-10-04
        • 1970-01-01
        相关资源
        最近更新 更多