Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Mal wieder eine Frage zu einer Oracle Datenbank.

Ich möchte die höchste ID (also den zuletzt eingetragenen Satz) auslesen, um 1 erhöhen und den neuen Wert als ID für den nächsten Datensatz benutzen.

Soweit hab ich über Google auch schon ein paar Antworten gefunden, allerdings hänge ich gerade etwas an dieser Stelle:


<cfquery name="suche" datasource="#application.datasource#">

	SELECT MAX(nutzer_id) AS MaxID 

	FROM nutzer

	</cfquery>


	<cfoutput query = "suche">

				<table border="0"><br>

					<tr><td>Höchste ID:</td><td><option value="#suche.nutzer_id#">#suche.nutzer_id#</option></td></tr>

				</table>

			  </cfoutput>

Damit will ich lediglich erstmal testen, ob mir der aktuell höchste Wert der ID ausgegeben wird, allerdings erscheint diese Fehlermeldung:
Element NUTZER_ID is undefined in SUCHE
Wie genau muss ich den in meiner Such Query definieren? Um den Wert hinterher anzupassen:

SELECT MAX(nutzer_id) + 1 AS NewMaxID FROM nutzer 

Jetzt geht es aber erstmal darum die Fehlermeldung zu beseitigen.

Geschrieben

Ok, das Problem hat sich erledigt. Man sollte auch seine richtigen Bezeichnungen einfügen *grummel*

Hab aber auch noch einen anderen Weg gefunden.

<cfquery name="suche" datasource="#application.datasource#">

SELECT MAX(nutzer_id) AS nutzer_id FROM nutzer

</cfquery>

<cfif isdefined("form.nutzer_id")> <cfset nutzer_id = form.nutzer_id><cfelse><cfset nutzer_id = #suche.nutzer_id# + 1></cfif>

Und dann bei cfform:

<cfform method = "post" name = "anmelden">

<table border="0">

<tr><td>ID:</td><td><cfinput type = "text" maxlength="50" value="#nutzer_id#" name = "nutzer_id" readonly></td></tr>

So wird die letzte ID immer um 1 hochgezählt und ins Registrierformular automatisch eingefügt. Durch das readonly kann der Eintrag auch nicht verändert werden. Bin jetzt noch auf der Suche, dass man das ID Feld komplett ausblenden kann.

Geschrieben

Hallo

ich weiß ja nicht genau was du "geplant" hast, aber das was ich vermute ist grad im Netzwerk echt "gefährlich"

Beispiel:

User 1: Ermittelt höchste Nummer => 10

User 2: Ermittelt höchste Nummer => immer noch 10 da noch kein Insert

User 1: Insert mit ID 11

User 2: Insert mit ID 11

Ergebnis: DB Verweigert das eintragen des DS da Schlüssel nicht eindeutig

Geschrieben

leider hab ich keine Ahnung was du da genau abfeierst, aber versuch doch mal mit

select sequence_name.nextval() from dual;

damit bekommst du die nächste freie id, aber du musst das direkt als Value verwenden, denn durch das select ist bereits hochgezählt worden.

versuch diese transaktionssteuerung doch dort zu lassen wo sie bereits funktioniert ^^

Geschrieben

Irgendwie sowas, ja.

Wird produktiv nicht eingesetzt, ist in der Abteilung nur als Testprojekt gedacht, da es zu "gefährlich" wäre die Azubis an die Datenbanken, etc. zu lassen.

Geschrieben

naja das ist schon normal so. da kann man einfach viel unsinn machen ohne zu merken das man etwas tut.

cascade ist da sowas was ganz übel durchschlagen kann, ohne das der azubi überhaupt weis was los ist.

oracle hat aber für solche dinge wie ID's eigentlich immer ne funktionsschnittstelle wie in dem falle das .nextval oder .currval um die nächsten freien ids zu holen.1(man kann die id's blockweise holen, gerade bei RAC oder cloud ist das lebenswichtig)

niemals sowas wie x= x+1 dazu benutzen, außer du willst wissen was da alles passieren kann ;)

ich merke gerade, ich glaub dir ist nicht bewusst das ein on insert,update trigger mit einer sequenz dein problem löst :D Oder machst du das extra mal ohne DBMS unterstützung?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...