Rownum abfragen und ggf in ein Datenfeld schreiben

Liebe/-r Experte/-in,
ich nutze die Anwendung Metastorm mit einer Oracle 10 -Datenbank im Hintergrund.
Ich benötige nun folgendes. Mit Hilfe eines Insert-Statements werden Daten in eine Tabelle geschrieben.
Ich möchte ein Datenfeld in dieser Tabelle mit der ROWNUM füllen.
Wie kann ich dies in den INSERT-Befehl einbinden?

Hier der Befehl:

Insert into ABA (FolderID, Name, Vorname, Abt) values (%efolder, %nachname, %vorname, %oe);

wobei die mit % gekennzeichneten Werte Variablen sind, die von Metastorm gefüllt werden.
Ich möchte nun, dies so ergänzen, dass die Oracle-Rownumber mitgegeben wird. Also z.B.

Insert into ABA (FolderID, Name, Vorname, Abt, Zeile) values (%efolder, %nachname, %vorname, %oe, ROWNUM);

Dies funktioniert so natürlich nicht, daher brauche ich Ihre Hilfe. Danke im Voraus,
Gruß,
Ptonka

Hallo Ptonka,

leider geht das so nicht. (Wie ja bereits schon selber bemerkt)

Da es sich bei ROWNUM um eine virtuelle Spalte handelt, und diese nur in Select-Statements zur Verfügung steht müssen wir diesen Ansatz vergessen.

Vielleicht können Sie mal kurz umschreiben, wofür Sie die ROWNUM brauchen. Wenn es darum geht ein eindeutiges Schlüsselfeld zu generieren, sollten Sie vielleicht eine SEQUENCE in Betracht ziehen. Vielleicht mit einem TRIGGER, dann braucht die Anwendung nicht angepasst werden, sondern die DB erledigt das befüllen des Feldes „selber“.

Ich hoffe wenigstens ein bisschen geholfen zu haben…

Gruß
KleinesSQLWunder

Hallo,

ich habe festgestellt, dass es sich um die ROWID handelt und nicht um die ROWNUM.
Diese kann ich auslesen und mein Problem der eindeutigen Identifizierung eines Datensatzes ist gelöst. Trotzdem Danke.
Gruß,
Ptonka

Hallo,

die ROWNUM existiert meines Wissens erst, wenn ein Datenatz in der Tabelle steht.
Vorher gibt es die Row ja noch gar nicht, demzufolge auch noch keine Rownum.

Einzige Möglichkeit die ich sehe, ist anschließend per Update die Spalte zu füllen.

Allerdings erschließt sich mir der Sinn nicht ganz, da sich die Rownum ja per Select jederzeit ausgeben lässt. Dazu wäre ein erneutes speichern in einer Spalte überflüssig…

Hallo!

Ich möchte ein Datenfeld in dieser Tabelle mit der ROWNUM
füllen.

Wie kann ich dies in den INSERT-Befehl einbinden?

Willst Du eine eindeutige ID oder eine „wirkliche“ Zeilennummer?
Eine eindeutige ID bekommst Du mittels einer Sequence, eine Zeilennummer bzw. die ROWNUM kannst Du bei einem Select mitangeben (was wesentlich einfacher ist, als diese mitzuschreiben und ggf. ständig upzudaten.

Grüße,
Tomh

spontan wuerde ich es mit einem „after insert trigger“ probieren, lese dazu in der original oracle doku nach.
gruss
guido

Hi!

Was soll denn Deine ROWNUM werden? Soll die pro Job hochzählen oder in der ganzen Tabelle? Wenn die für die ganze Tabelle hochzählen soll, dann wäre eine Sequence vlt. das richtige. Dabei werden die Lücken aber nicht mehr geschlossen (wenn Du z.B. einen Datensatz löschst).

Einfach mal nach „Oracle SEQUENCE“ suchen…

Viele Grüße, Alex