Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

  • Autor

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.

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

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 ^^

  • Autor

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.

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?

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.