我正在尝试更新一些应该通过ODBC将数据写入各种数据库(SQL,Access,Oracle)的现有代码,但是我遇到了一些Oracle问题并且正在寻找任何建议。
我使用Trigger设置我的Oracle数据库(在线基础教程,我想支持)。
CREATE TABLE TABLE1 (
RECORDID NUMBER NOT NULL PRIMARY KEY,
ID VARCHAR(40) NULL,
COUNT NUMBER NULL
);
GO
CREATE SEQUENCE TABLE1_SEQ
GO
CREATE or REPLACE TRIGGER TABLE1_TRG
BEFORE INSERT ON TABLE1
FOR EACH ROW
WHEN (new.RECORDID IS NULL)
BEGIN
SELECT TABLE1_SEQ.nextval
INTO :new.RECORDID
FROM dual;
end;
GO
然后我使用SELECT * FROM TABLE1
填充DataTable。第一个问题是此DataTable不知道RecordId列是自动生成的。如果我的表中有数据,那么我就无法改变它,因为我收到错误
无法更改类型为“Double”的DataColumn的AutoIncrement 有数据。
如果我继续,忽略这一点,那么我很快就会卡住。如果我创建一个新的DataRow并尝试插入它,我不能将RecordID设置为DBNull.Value,因为它抱怨该列必须为非null(NoNullAllowedException)。但是我不能自己生成一个值,因为我不知道我应该使用什么值,并且不想通过使用下一个可用值来搞砸触发器。
关于如何在没有ODBC抱怨的情况下插入数据的任何建议?
答案 0 :(得分:3)
您的第一个问题似乎不是Oracle数据库。 Oracle中没有“Autoincrement”列这样的东西。您确定该消息来自Oracle数据库吗?
使用Oracle,您应该能够在插入主键时提供任何虚拟值,触发器将覆盖它。
您提供的描述中也没有任何内容可以阻止您在Oracle中更新此值(因为您的触发器仅在插入时),除非您有对该键的外键引用。