1

Ich bin ein wenig rostig mit meinen Trigger und was nicht und ich versuche, dieses Problem für eine Klasse, um herauszufinden:SQL: Keine Abhilfe Identität Funktion verwenden Trigger

In einer Datenbank TEST, Tabellen haben nicht die Möglichkeit, der IDENTITY-Funktion. Mit anderen Worten, wenn wir eine Zeile in die Tabelle "Benutzer" einfügen, möchten wir, dass der Primärschlüssel "UserID" automatisch erhöht wird. Bitte schlagen Sie eine Umgehungslösung vor, um diese Funktion ohne eine solche integrierte Funktionalität zu implementieren. (Hinweis: Sie können immer noch Funktionen, gespeicherte Prozeduren, Sequenzen, Trigger, etc.) verwenden

+0

Wie wäre es mit einem Hausaufgaben-Tag? – Mathias

Antwort

0

Sie verwenden eine Sequenz, und es ist sehr häufig mit Oracle, die nicht (oder nicht einmal, es kann sich geändert haben) haben Identitätsspalten. Da dies Hausaufgaben sind, lasse ich dich den Rest von hier herausfinden.

1

Verwenden Sie eine Int-Spalte für den Primärschlüssel der Tabelle namens ID.

Sie können dann einen anstelle von Insert Trigger verwenden, um den für die ID einzufügenden Wert aufzufüllen/zu berechnen.

Der Trigger bestimmt, wie die maximal vorhandene ID für die fragliche Tabelle ist (mithilfe der MAX-ID aus TabelleA) und dann für jeden einzufügenden Datensatz um 1 erhöht.

Wenn in der Tabelle keine Datensätze vorhanden sind, ist der ID-Wert 1.

+1

Hier ist es wichtig zu beachten, dass Ihr Transaktionsisolationsmodus hier kritisch ist! Wenn Sie eine normale READ COMMITTED-Isolationsstufe verwenden, ist es möglich, dass zwei Prozesse dieselbe ID generieren könnten, was in der Tat eine schlechte Sache wäre. Sie müssen also innerhalb des Triggers eine SERIALIZABLE-Isolationsstufe verwenden, da sonst Probleme auftreten können. Oder besser noch, vermeiden Sie es ganz und verwenden Sie eine IDENTITY ;-) –

+0

@Dave +1: Ein sehr wichtiger Punkt zu beachten. –