r26t01 Geschrieben 1. Juni 2011 Geschrieben 1. Juni 2011 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. Zitieren
r26t01 Geschrieben 1. Juni 2011 Autor Geschrieben 1. Juni 2011 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. Zitieren
HJST1979 Geschrieben 1. Juni 2011 Geschrieben 1. Juni 2011 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 Zitieren
r26t01 Geschrieben 1. Juni 2011 Autor Geschrieben 1. Juni 2011 Vor dem Absenden werd ich noch eine Update Funktion reinhauen. Wenn 10 immer noch die höchste ist, dann ok, wenn nicht auf 11 oder entsprechende Nr. ändern Zitieren
HJST1979 Geschrieben 1. Juni 2011 Geschrieben 1. Juni 2011 Also willst kurz vor dem Insert nochmals ein "Select MAX() " machen ? Zitieren
Corto -sX- Geschrieben 1. Juni 2011 Geschrieben 1. Juni 2011 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 ^^ Zitieren
r26t01 Geschrieben 1. Juni 2011 Autor Geschrieben 1. Juni 2011 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. Zitieren
Corto -sX- Geschrieben 1. Juni 2011 Geschrieben 1. Juni 2011 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 Oder machst du das extra mal ohne DBMS unterstützung? Zitieren
r26t01 Geschrieben 1. Juni 2011 Autor Geschrieben 1. Juni 2011 Dann werd ich mir das nochmal angucken Zitieren
Empfohlene Beiträge
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.