我正在尝试使用Toad将Excel电子表格导入Oracle。问题是我导入的表有一个主键字段,我使用“序列”.nextval填充普通的存储过程插入。
使用Toad导入向导,我尝试将'table_seq.nextval'作为表达式放入,但是当我最后执行向导时,我收到错误:无法将类型(UnicodeString)的变体转换为类型(Double)。
那么可以使用带有Toad导入向导的sequence.nextval导入Excel数据,还是有更好的方法?
我还想过让Excel通过启动超出当前表中的种子来生成密钥。但是对Oracle来说是新手,这会搞砸我为表设置的顺序吗?例如,如果在插入之前,下一个可用的ID是500,并且Excel中的插入插入了500到5000的行,那么下一次执行该表序列的存储过程是否会尝试使用500?
提前致谢!
答案 0 :(得分:4)
是的,序列将保持为50,使用存储过程时会出现primary key violated
异常。
那是因为序列没有以任何方式链接到表。而且无法联系。它们是分开的物体。
我看到的最佳方法是使用触发器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;