【发布时间】:2011-11-23 17:19:53
【问题描述】:
我正在尝试更新一些现有代码,这些代码应该通过 ODBC 将数据写入各种数据库(SQL、Access、Oracle),但我在使用 Oracle 时遇到了一些问题,正在寻找任何建议。
我已经使用触发器设置了我的 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 不知道 RecordId 列是自动生成的。如果我的表中有数据,那么我无法更改它,因为我收到错误
无法更改类型为“Double”的 DataColumn 的 AutoIncrement 有数据。
如果我继续忽略这一点,那么我很快就会陷入困境。如果我创建一个新的 DataRow 并尝试插入它,我无法将 RecordID 设置为 DBNull.Value,因为它抱怨该列必须为非空 (NoNullAllowedException)。但是,我自己无法生成值,因为我不知道我应该真正使用什么值,并且不想通过使用下一个可用值来搞砸触发器。
关于如何插入数据而不引起 ODBC 抱怨的任何建议?
【问题讨论】:
-
WHEN子句中'new'前不应该有冒号吗?