oracle - wie zu verwenden-Sequenz als auto increment id?

Ich habe eine oracle-Datenbank-Tabelle:

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;

Wenn ich insert 20 Datensätze in die Tabelle mit Datenbank-tool, und dann mit meiner C# - Anwendung zum einfügen von Datensätzen, die dog-id beginnt mit 1, anstatt 21.

Jemand kann mir helfen, diesen Fehler beheben kann?

Dank.

in Ihrem C# - code, dann sind Sie vorbei die Spalte "Id"? ich denke, Sie müssen sein. der trigger ist so codiert, dass nur Feuer (when-Klausel), wenn die ID nicht übergeben. Auch ich würd dir raten es nicht zu verwenden, notiert die Namen in der DB-Objekte.
Ich bin mir nicht sicher, dass ich Folgen Frage. Sind Sie auf der einsetzen die ersten 20 Zeilen, bevor Sie die Auslöser? Sind Sie auf der einsetzen die ersten 20 Zeilen, indem Sie explizit die Angabe einer "Id" - Wert und verhindert somit das auslösen von Brand? Ist dein C# - Programm übergeben Werte für "Id", dass die Ursache der trigger umgangen werden kann (d.h. die übergabe in einem Wert von 1, explizit)?
die ersten 20 Zeilen mit id-Wert. Es gibt keine "Id" - Spalte in meinem c# - code.
In einigen Fällen, brauche ich die genaue Id-Wert, e ist.g: import alte Daten.
was ist die "Datenbank-Tools" erzeugen dann? fügen Sie db side insert-statment + c# - code, wie eine Sequenz ohne Zyklus kann nicht zurück springen und wiederverwenden eine ID, die Sie bereits erzeugt.

InformationsquelleAutor Rock | 2012-12-10

Schreibe einen Kommentar