PDA

View Full Version : SQL Datum Unterlassungswert



Frankk
12-11-19, 12:14
Ich habe ein Verständnisproblem mit SQL. Wenn ich einen Insert in die Datenbank (DDS-Beschrieben) mache, setzt er alle Datumsfelder (ISO-Format) auf das aktuelle Datum.

Als Beispiel habe ich eine Datei, welche eine alphanumerisches Feld und ein Datum beinhaltet. Wenn ich einen Insert mache in dem ich nur den alphanumerischen Wert mit "Insert" ausgebe bzw. einfüge, setzt er das Datumsfeld auf das aktuelle Datum (2019-11-12).

Wo oder womit kann ich dieses Verhalten steuern ohne die DDS-Beschreibung aufzugeben?

Kann ich dieses Verhalten SQL übergreifend steuern?

camouflage
12-11-19, 12:48
Hatte einen ähnlichen Fall, allerdings mit CPYF. Ich denke nicht, dass es mit SQL was zu tun hat.
Verdankenswert hat mir seinerzeit Baldur auf die Sprünge geholfen.

siehe hier:
http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/21797-CPYF-und-das-liebe-Datum?p=106843#post106843

B.Hauser
12-11-19, 13:15
Wenn Datensätze geschrieben werden, unabhängig ob die Dateien mit SQL oder DDS beschrieben wurden, und Feld-Werte nicht explizit angegeben wurden, wird der Default-Wert stattdessen eingefügt.
Der Default-Wert bei Datums-Feldern ist das aktuelle Datum bzw. die aktuelle Zeit bzw. die aktuelle Zeit-Marke.
Wenn Du andere Default-Werte möchtest, muss Du diese explizit in der Definition der Datei setzen.
Für DDS gibt es auch das Schlüssel-Wort DFT, mit dem ein Default-Wert festgelegt werden kann.

Alternativ, kannst Du ja den gewünschten Default-Wert für die Spalte beim Insert angeben.

Native I/O arbeitet anders als SQL, d.h. da wird immer der komplette Datensatz geschrieben. Damit wird immer der Wert aus der (internen) Datenstruktur des Datensatzes übernommen.

Birgitta

BenderD
12-11-19, 13:37
Native I/O arbeitet anders als SQL, d.h. da wird immer der komplette Datensatz geschrieben. Damit wird immer der Wert aus der (internen) Datenstruktur des Datensatzes übernommen.

Birgitta

... es sei denn, dass man über ein logische Datei oder View(was man immer tun sollte) schreibt, die das Feld nicht enthält.

D*B

Fuerchau
12-11-19, 13:43
Das unterscheidet eben den Rest der Felder von Datum/Zeit/Zeitmarke.
Alle anderen Felder erhalten einen Standardwert je nach Feldtyp.
- Varlen-Felder mit Länge 0
- Char/Nchar mit Space/Blank
- Binary mit x'00'
- Zahlfelder (int, dec, double, decflt, ...) eben die 0
Nur Datumsfelder eben das Current Date/Time/Timestamp.

Wer das nicht will kann ja ebenso ALWNULL (oder NOT NULL bei SQL weglassen) verwenden.
In diesem Fall ist der Unterlassungswert NULL.

Frankk
12-11-19, 13:57
Hallo allerseits,

herzlichen Dank für eure Mühe.

Hat mir sehr geholfen und es ist nun einiges klarer!

Frank

dibe
12-11-19, 14:39
es sei denn, dass man über ein logische Datei oder View(was man immer tun sollte) schreibt

Können Views, die mehr als eine Tabelle beinhalten, auch mit update / write verarbeitet werden?
Das bekomme ich nicht hin (letzte Versuch ist schon etwas her, daher weis ich den Fehler nicht mehr)
Dietlinde Beck

BenderD
12-11-19, 14:56
Können Views, die mehr als eine Tabelle beinhalten, auch mit update / write verarbeitet werden?
Das bekomme ich nicht hin (letzte Versuch ist schon etwas her, daher weis ich den Fehler nicht mehr)
Dietlinde Beck

An SQL Views kann man einen instead Trigger hängen (den man allerdings mit RLA nicht verarbeiten kann). DDS join LF sind read only, bei SQL kann man nur Felder aus einer Datei updaten. Für das obige Beispiel tritt das Problem allerdings sowieso nicht auf.

D*B