ODBC与Oracle触发键列
问题描述:
我试图更新一些现有的代码,应该通过ODBC将数据写入各种数据库(SQL,Access,Oracle),但我遇到了一些Oracle问题,我正在寻找任何建议。ODBC与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列是自动生成的。如果我在表中有数据,那么,因为我得到一个错误
不能与type“双师型”改变的DataColumn的自动递增一旦 有数据我不能改变它。
如果我继续,忽略这一点,那么我很快就会陷入困境。如果我创建一个新的DataRow并尝试插入它,我不能将RecordID设置为DBNull.Value,因为它抱怨该列必须是非空值(NoNullAllowedException)。然而,我不能自己产生一个值,因为我不知道我应该使用什么值,也不想通过使用下一个可用值来搞砸触发器。
有关如何在没有ODBC抱怨的情况下插入数据的任何建议?
答
看来您的第一个问题并不在于Oracle数据库。 Oracle中没有这样的“自动增量”列。您确定该消息来自Oracle数据库吗?
对于Oracle,您应该能够为主键插入提供任何虚拟值,并且触发器将覆盖它。
您提供的描述中也没有任何内容会阻止您在Oracle中更新此值(因为您的触发器仅在插入时),除非您拥有对该密钥的外键引用。
在WHEN子句中'new'之前不应该有冒号吗? –