1

我正在尝试使用 Toad 将 Excel 电子表格导入 Oracle。问题是我要导入的表有一个主键字段,我使用“sequence”.nextval 来填充正常的存储过程插入。

使用 Toad 导入向导,我尝试将 'table_seq.nextval' 作为表达式输入,但是当我最后执行向导时,出现错误:无法将类型的变体 (UnicodeString) 转换为类型 (Double)。

那么是否可以通过 Toad 导入向导使用 sequence.nextval 导入 Excel 数据,还是有更好的方法?

我还考虑了让 Excel 通过启动超出当前表中的种子的种子来生成密钥。但是作为 Oracle 的新手,这会扰乱我为表设置的顺序吗?例如,如果在插入之前,下一个可用 ID 是 500,并且 Excel 中的插入插入的行从 500 到 5000,那么下一次执行该表序列的存储过程是否会尝试使用 500?

提前致谢!

4

1 回答 1

4

primary key violated是的,序列将保持在 50,并且在使用存储过程时会出现异常。

那是因为序列没有以任何方式链接到表。并且无法链接。它们是分离的对象。

我看到的最好方法是使用on insert for each row将 id 设置为的触发器nextval

代码示例:

CREATE OR REPLACE TRIGGER trg_table_name_set_id
  BEFORE INSERT 
  ON table_name
  FOR EACH ROW
BEGIN

  SELECT table_seq.nextval INTO :new.id FROM DUAL; --id would be the id column in your table

--or, if you are on 11g, simply
--:new.id := table_seq.nextval;

END trg_table_name_set_id;
于 2012-12-12T14:05:17.220 回答