1

我正在使用 DAT 文件向表中插入多个条目。我如何知道哪些记录导致约束失败(例如重复约束)?我正在使用 informix dbaccess 来加载条目。

这是我如何加载它的示例代码:

load from 'table.dat'
insert into table (
    col1,
    col2,
    col3
);

这是我得到的错误。它显示了它失败的 sql 代码的位置,但它没有告诉我哪个特定行失败。

  268: Unique constraint (test.tableconstraint) violated.

  100: ISAM error:  duplicate value for a record with unique key.
Error in line 1
Near character position 0

4

1 回答 1

3

你有几个选择:

  1. 使用 DB-Load ( dbload) 而不是 DB-Access 来加载数据。

    DBLOAD Load Utility           INFORMIX-SQL Version 12.10.FC6
    
    Usage: 
    
    dbload [-d dbname] [-c cfilname] [-l logfile] [-e errnum] [-n nnum]
        [-i inum] [-s] [-p] [-r | -k] [-X]
    
        -d  database name
        -c  command file name
        -l  bad row(s) log file
        -e  bad row(s) # before abort
        -s  syntax error check only
        -n  # of row(s) before commit
        -p  prompt to commit or not on abort
        -i  # of row(s) to ignore before starting
        -r  loading without locking table
        -X  recognize HEX escapes in character fields
        -k  loading with exclusive lock on table(s)
    
  2. 使用START VIOLATIONS TABLESTOP VIOLATIONS TABLE。这将在一个表中记录违反约束的数据,并在另一个表中提供诊断信息。如果您愿意,您可以指定辅助表名称,但默认是带有后缀_vio和的基表名称_dia

尝试两者——我怀疑违规表是更好的选择,但两者都有效。

于 2019-04-10T05:12:15.393 回答