PDA

View Full Version : Clear im SQL



dibe
22-04-21, 10:11
Guten Tag,

wir wollen mit einem allg. gültigen SQL Felder leer machen.

Wir wollen dazu ein dynamisches SQL bauen, das (ungefär) so aussieht

Update Datei set Feld = 0 where ... bzw, wenn das Feld alpa ist,
Update Datei set Feld = ' ' where ...

Diese Funktion muß in verschiedenen Ecken unsere SW engebunden werden.
Dabei ist die Datei und das Feld variabel. Wir wissen also auch nicht,
ob es nun ein alpa oder ein numerisches Feld ist.
Gibt es etwas das dem Clear entspricht?
Sonnst müsste ich immer ein Blank übertragen und den Fehler abfangen. Das ist nicht so schön.
Vielen Dank
Dietlinde Beck

B.Hauser
22-04-21, 11:09
Es gibt keinen CLEAR in SQL.
Da Du ja den Spalten-Inhalt auf einen Default-Wert setzen willst und nicht auf den NULL-Wert, musst Du wohl oder übel den Datentypen kennen oder ermitteln.

Im übrigen gibt es ja noch andere als numerische oder alphanumerische Datentypen, z.B. DATE/TIME/TIMESTAMP

Wenn Du die Datei und das Feld kennst und das SQL sowieso dynamisch zusammenklöppln willst, kannst Du den Datentypen aus der Catalog View SysColumns ermitteln und dann im Anschluss dein SQL-Statement entsprechend aufbereiten.

Birgitta

Fuerchau
22-04-21, 11:26
Ich weiß auch nicht, wofür das gut sein soll.
Im embedded SQL arbeitest du ja mit deinen Host-Variablen.
Zur Laufzeit wird dann immer vor dem SQL ein "eval SQLnnnn = HostVarxxx;" eingefügt und nach dem SQL ein "eval HostVarXXX = SQLnnnn;"

Somit brauchst du nur einen Clear auf deine Hostvariablen.
Nimmst du eine DS, kannst du auch einen Clear auf die DS anwenden, dann werden alle Unterfelder passend auf den Defaultwert gesetzt.

Möchtest du nur den Inhalt eines Satzes leeren, kannst du ebenso einen
update table set row = : LeereDS
durchführen. Das ist aber unnötig.

dibe
22-04-21, 11:48
@Fuerchau
Es geht um einzelnde Felder, die sind i.d.R. zu diesem Zeitpunkt nicht bekannt.

@Birgitta
Wir haben nur Alpa und Numerische Felder.
Wir haben keine View SysColumns auf dem System, wie kann ich die bekommen, was steht da drin?
vielen Dank
DiBe

Andreas_Prouza
22-04-21, 12:25
Das geht eigentlich ganz einfach
Update Tab set Spalte = default

Das Schlüsselwort DEFAULT setzt den default Wert der Spalte mit dem jeweiligen Datentyp automatisch.
Du brauchst dich also um nichts kümmern.

Du kannst maximal vorher prüfen ob die Default-Werte aller Spalten von den Tabellen, so gesetzt sind wie du es gerne hättest.

In der QSYS2.SYSCOLUMNS siehst du auch was der Default-Wert einer jeden Spalte ist.

Also ganz simple und du brauchst nicht extra irgendwelche Datentypen prüfen oder sonstige Workarounds machen.

lg Andreas

B.Hauser
22-04-21, 12:36
Die View SysColumns steht in der Bibliothek QSYS2 und MUSS auf auf dem System sein.
Auf diese View sollte es auch keine Zugriffsbeschränkungen geben.
In der SYSCOLUMNS befinden sich die Infomationen über alle Felder/Spalten in allen Tabellen/Views/LF.

Birgitta