[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2003
    Beiträge
    292

    create table mit timestamp

    Hallo zusammen,
    bisher habe ich mit DDS physische Dateien erstellt und dabei auch Felder für timestamp
    definiert.
    Das gleiche wollte ich jetzt mit create table machen, kann aber ein RPG nicht wandeln, weil
    mein Statement im RPG nicht mehr funktioniert.
    Beispiel:
    PF mit DDS..
    Click image for larger version. 

Name:	create_table_timestamp_1.png 
Views:	7 
Size:	30,5 KB 
ID:	677

    im RPG fülle ich das Feld dann...
    asptimsn = %timestamp();

    Wie muss ich das Feld mit create table definieren, damit ich es im RPG mit %trimestamp() füllen kann ???
    create table worklib.wrkfile
    ( xxkey char(5)
    , xxtimsn timestamp
    )

    Einfach mit Angabe "timestamp" als Art ???
    ...das hat bei mir nicht funktioniert, als ich das RPG umwandeln wollte
    Danke im Voraus.

    Vg.

  2. #2
    Registriert seit
    Jan 2012
    Beiträge
    1.153
    Eigentlich sieht das bei dir gar nicht schlecht aus, denke ich. Hier mal ein Beispiel, wie
    ich Tabellen erstelle:

    Code:
    create or replace table eddatlib/daxdatar (
    rt_rec_id  decimal(15)    generated by default as identity,
    rt_kennung char(100)      not null with default,
    -- Protokollfelder:
    rt_erfusr  char(10)       not null with default,
    rt_erfts   timestamp      not null with default current_timestamp,
    ...
    constraint eddatlib/daxdatar_pk primary key( rt_rec_id ) )
    rcdfmt daxdatr1
    Wenn das nicht hilft, müsstest du mal genau sagen, welchen Compilefehler du bekommst.

    Hast du vielleicht kein Record-Format angegeben?

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.891
    Was für einen Fehler bekommst Du denn überhaupt?

    Die Definition mit Timestamp ist korrekt ... und dieses Feld kann man auch mit %Timestamp() füllen.

    Ich würde allerdings bei einer Arbeitsdatei in RPG die Felder immer als NICHT NULL-fähig definieren, also:
    NOT NULL Default-Wert.

    Kleiner Tipp mit ACS GENERATE_SQL bzw. mit der Stored Procedure GENERATE_SQL kannst Du Dir direkt aus einer physischen Datei den CREATE (OR REPLACE) Befehl generieren.
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Jan 2003
    Beiträge
    292
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Was für einen Fehler bekommst Du denn überhaupt?

    Die Definition mit Timestamp ist korrekt ... und dieses Feld kann man auch mit %Timestamp() füllen.

    Ich würde allerdings bei einer Arbeitsdatei in RPG die Felder immer als NICHT NULL-fähig definieren, also:
    NOT NULL Default-Wert.

    Kleiner Tipp mit ACS GENERATE_SQL bzw. mit der Stored Procedure GENERATE_SQL kannst Du Dir direkt aus einer physischen Datei den CREATE (OR REPLACE) Befehl generieren.

    Danke Birgitta
    Den Umwandlungsfehler habe ich nicht mehr auf dem Schirm.
    Wenn er wieder auftritt, schreibe ich nochmal.
    Vg.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.353
    NULL-fähige Felder sind auch in ILERPG durchaus zulässig.
    Denn bei NOT NULL ist der Default zufällig Current Timestamp was auch nicht immer sinnvoll ist. Man muss den Default dann tatsächlich auf "0001-01-01 00.00.00.000000", bei ISO, festlegen um ihn in ILERPG mit *LOVAL ansprechen zu können.
    Wenn ich lt. obigen Beispiel noch ein rt_chgts benötige halt ich current timestamp für nicht zielführend.
    Auch wenn ich in SQL arbeite ist eine Abfrage "is null" einfacher als "= timestamp('0001-01-01 00.00.00.000000')".

    Aber Programmierung eralubt halt viele Wege.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.891
    Natürlich kann man in RPG auch mit NULL-fähigen Feldern arbeiten selbst mit Native I/O (etwas anderes habe ich auch nie behauptet), es ist nur aufwändiger.
    NULL-Werte sind Werte außerhalb des gültigen Bereichs, also wenn ich alle Werte zwischen *LOVAL und *HIVAL selektiere, werden die Datensätze, die NULL-Werte enthalten nicht ausgewählt, also ist eine zusätzliche Prüfung erforderlich.
    Werden NULL-Werte aus einem SQL-Statement heraus zurückgegeben, muss ich ich RPG entweder mit Indikator-Variablen arbeiten, und jede Indikator-Variable prüfen (bei NULL-Werten werden i.Ü. die Host-Variablen nicht intialisiert!) oder ich muss jede einzelne Spalte, die einen NULL-Wert enthalten könnte, mit COALESCE so verändern, dass ein NULL-Wert in einen Default-Wert konvertiert wird.
    Da NULL-Werte extra geprüft werden müssen, ist das auch ein zusätzlicher Aufwand, die (wenn auch nur im Nano-Sekunden-Bereich) die Performance beeinträchtigen kann.
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.353
    "bei NULL-Werten werden i.Ü. die Host-Variablen nicht intialisiert!"
    Das ist definitiv falsch, dies gilt nur für Date/Timestamp-Variablen.
    Denn die Evals der Einzelfelder werden beim Fetch alle ausgeführt, schau dir den generierten Code an!
    Nur bei den o.a. Typen gibts halt kein Loval-Ergebnis, da das bei bestimmten DateTime-Formaten (2-stelliges Jahr) nicht definiert ist und zu RPG-Laufzeitfehlern führt.
    Wie i.Ü. auch beim 1.1.0001 und 2-stelligem Jahr Zielfeldern.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. UDF mit create Table läuft nicht in Batch
    By msost in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 08-09-16, 17:36
  2. CREATE TABLE: Table-Name länger als 10 Stellen
    By edv90020 in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 20-05-10, 06:44
  3. CREATE TABLE mit DEFAULT Wert aus Funktion
    By morula in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 13-06-08, 20:16
  4. CREATE TABLE
    By Willi1 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-05-02, 08:38
  5. DATFMT bei CREATE TABLE
    By lorenzen in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 21-03-01, 13:44

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •