Anmelden

View Full Version : CREATE TABLE mit DEFAULT Wert aus Funktion



morula
13-06-08, 10:17
Hallo Zusammen

Ich muss eine Tabelle mit einer TIMESTAMP Spalte erstellen welches als Default Wert die UTC-Zeit liefert.

Da meine OS/400 Version V5R2M0 ist erhalte ich die UTC-Zeit meines Wissens nach nur mit der Formel

CURRENT TIMESTAMP - CURRENT TIMEZONEDie obengenannte Formel verträgt sich leider nicht mit einem CREATE TABLE Statement.
Beispiel:

create table testtab (dat timestamp default current timestamp - current timezone)Dabei erscheint die Fehlermeldung:

ERROR [42000] [IBM][iSeries Access ODBC-Treiber][DB2 UDB]SQL0104 - Token - ungültig. Gültige Token: AS NO FOR NOT FILE WITH CCSID CHECK UNIQUE DEFAULT PRIMARY.Nun meine Fragen:
Gibt es hierzu eine Umgehungslösung welche in einem CREAT TABLE (ohne Trigger) erstellt werden kann?
Können Funktionen generell nicht in DEFAULT-Klauseln verwendet werden?
Funktionieren meine "Anforderungen" in neueren OS/400 Releases?

Vielen Dank

Daniel

Fuerchau
13-06-08, 12:40
Die ist leider eine Sache für einen Insert-Trigger.

UFK
13-06-08, 18:07
Ganz pragmatisch würde ich einfach den normalen Current Timestamp vorsehen, und mir die Current Timezone in einem weiteren Feld merken.

Wenn mans wirklich in UTC umrechnen muß, und es später im Prozeß erst einmal umgerechnet hat, kann man das ja entsprechend updaten. Du hättest dann nur eine zusätzliche Spalte, die nicht angefordert worden war.

morula
13-06-08, 20:16
Wieso einfach wenn es auch kompliziert geht ....

Ich hab da noch einige Rahmenbedingungen, weshalb ich keine zusätzliche Spalte erstellen kann oder auch keinen Default-Wert per Insert-Statement übergeben kann.

Grob gesagt geht es um ein SQL Übersetzungsprogramm welches transparent für MS SQL Applikationen eingesetzt werden kann. Dadurch wird der Applikation vorgegaukelt, dass die Applikation mit einer MS SQL DB verbunden ist, in Wirklichkeit aber mit der iSeries kommuniziert.

Im grossen und ganzen läuft die Sache sehr zufriedenstellend. Klar ist, dass nicht alles 100% übersetzt werden kann. Wie es auch das Beispiel mit dem DEFAULT-Wert zeigt. Aber Probleme sind ja da um gelöst zu werden.

Bevorzugteste Lösung wäre eine UDF welche in der DEFAULT-Klausel angegeben werden könnte. Da dies nicht geht muss ich mich langsam mit dem Gedanken an einem INSERT-Trigger anfreunden ...