# SQLPLUS und Variablen zuweisen



## wobeni (7. Juli 2008)

Hallo,

wie kann man unter SQLPLUS eine select Ausgabe in eine 
Benutzervariable schreiben. Nachfolgend eine kurze Erläuterung der Aufgabenstellung:
DEFINE zn = <Für die Definition der Variable "zn" soll ein select Kommando ausgeführt werden, welches eine Zahl zurück gibt>

Anschliessend sollte die Variable "zn" z.B. in einem insert Kommando benutzt werden.
insert into <table> VALUES ('Mustermann', 'Max', '&zn' );

Vielen Dank


----------



## planb2000 (8. Juli 2008)

Hallo,

Du möchtest dynamisch SQL statements zusammenbauen diskutiert in:
http://www.tutorials.de/forum/relat...-9i-variablen-parameter-param1-param_1-a.html
oder auch
http://www.tutorials.de/forum/relat...oracle-verwendung-von-variablen-abfragen.html
viel spaß.

Grüße


----------



## wobeni (8. Juli 2008)

Hallo,

komme damit leider nicht ganz klar. Hier nochmal etwa ausführlicher mein Anliegen.

Vorhandene Tabelle:
BEREICH	 FOLGE	 IDENTNR  KNR	THEMANR	     ZEILE	   ZEILNR
   10	           1	     12345	100	     500	Beispieltext	     1
   10	           1	     12345	100	     500	Beispieltext-2	    2
.....


In diese Tabelle sollen weitere Datensätze eingefügt werden. Allerdings sollte die 
Spalte "ZEILNR" entsprechend hochgezählt werden. In obigem Beispiel müsste der 
nächste Datensatz also folgendermaßen aussehen.

BEREICH	 FOLGE	 IDENTNR  KNR	THEMANR	     ZEILE	     ZEILNR
   10	           1	     12345	100	     500	Beispieltext-3	      3

Da ich im Vorfeld allerdings nicht weiß, wieviel Zeilen ( Spalte "ZEILNR" ) bereits in der Tabelle vorhanden sind, ermittle ich die Anzahl der vorhandenen Zeilen durch den folgenden select Befehl und möchte diese Ausgabe (Zahl) in eine Variable schreiben, welche dann in dem insert Befehl verwendet wird.

Ermitteln der Zeilenanzahl +1
Wie bekommt man die Ausgabe des folgenden selects in eine Variable geschrieben,
welche ich in dem darauffolgenden INSERT verwenden kann
Variable = select count(zeilnr)+1 from cthema where identnr = '12345' and themanr = '500';

Mit dem folgenden INSERT Befehl ausführen:
insert into cthema VALUES ( '10' , '1' , '12345', '100', '500', 'Beispieltext-2', '< Inhalt-der-Variable-von-select-ausgabe>' );


Vielen Dank


----------



## Exceptionfault (8. Juli 2008)

Hiermit?


```
insert into cthema VALUES ( '10' , '1' , '12345', '100', '500', 'Beispieltext-2', 
 (select count(zeilnr)+1 from cthema where identnr = '12345' and themanr = '500')
);
```

Aber Achtung, das ganze ist nicht wirklich sicher! Wenn zwei User gleichzeitig einen solchen Insert machen und beide noch nicht COMMITTED, dann sind hinterher zwei Zeilen mit der selben Zeilennummern in der Tabelle. Das ganze ist also nicht für multiuser ausgelegt und somit - aus der Sicht eines DBAs -  falsch!


----------

