我有一個Oracle數據庫表:oracle - 如何使用序列作爲自動增量ID?
CREATE TABLE "DogInfo" (
"Id" NUMBER NOT NULL ENABLE,
"DogName" VARCHAR2 (50 CHAR) NOT NULL ENABLE,
"DogAge" NUMBER NOT NULL ENABLE,
CONSTRAINT "DogInfo_PK" PRIMARY KEY ("Id") ENABLE
);
CREATE SEQUENCE "DOGINFO_SEQ" MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE;
CREATE OR REPLACE TRIGGER "BI_DogInfo"
BEFORE INSERT ON "DogInfo" FOR EACH ROW
WHEN (NEW."Id" IS NULL OR NEW."Id" = 0) BEGIN
SELECT "USERINFO_SEQ".nextval INTO :NEW."Id" FROM dual;
END;
ALTER TRIGGER "BI_DogInfo" ENABLE;
如果我插入20條記錄與數據庫工具的表,然後用我的C#的Web應用程序插入記錄,狗ID將與1日開始,而不是21 。
任何人都可以幫助我解決這個錯誤?
謝謝。
在你的C#代碼然後你通過「Id」列?我想你一定是。如果ID沒有被傳入,觸發器被編碼爲只觸發(when子句)。另外,我建議你不要在DB對象中使用帶引號的名稱。 – DazzaL
我不確定我是否按照這個問題。在創建觸發器之前是否插入前20行?您是否通過明確指定「Id」值來插入前20行,從而防止觸發器被觸發?您的C#應用程序是否傳遞了導致觸發器被繞過的「Id」值(即明確傳遞值1)? –
具有id值的前20行。在我的C#代碼中沒有「Id」列。 – Rock