[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2005
    Beiträge
    27

    Trigger mit Operations Navigator

    Hallo,

    könnt ihr mir evtl. bei folgendem Problem weiterhelfen?

    Wir wollen bei einer Datei immer einen Satz ausgeben, wenn etwas geändert, erfasst oder gelöscht wird. Dazu wird der User, der Event, der Auslöser, der Zeitstempel und der gesamte Datensatz weggeschrieben. Leider funktioniert dies aber nicht.

    Zum testen des SQL Befehls habe ich auf der AS400 folgenden funktionsfähigen Befehl eingegeben:
    insert into xxlib/xxfile (select a.*, USER, 'B', 'U', CURRENT TIME from tmpalt a)
    insert into xxlib/xxfile (select a.*, USER, 'A', 'U', CURRENT TIME from tmpneu a)

    Erläuterung: 'A' = after, 'B' = before, 'U' = update, 'D' wäre Delete, 'I' wäre Insert

    Gebe ich den folgenden Befehl (bei den Trigger SQL Anweisungen) über den Operations Navigator ein,
    BEGIN ATOMIC
    insert into xxlib.xxfile (select a.*, USER, '1', '2', CURRENT TIME from tmpalt a);
    insert into xxlib.xxfile (select a.*, USER, '1', '2', CURRENT TIME from tmpneu a);
    END
    kommt folgende Fehlermeldung:

    Wert für Spalte oder Variable XTIME nicht verträglich.

    Nachrichten-ID:SQL0408

    Ursache . . . . : Die Datenart des Quellenwerts ist mit der Datenart der Zielspalte oder der Variablen XTIME nicht verträglich. Handelt es sich bei der Anweisung um eine Anweisung INSERT oder UPDATE, ist XTIME eine Spalte in Tabelle XXFILE in XXLIB.-- Einer Spalte einer numerischen Art können Werte einer numerischen Art zugeordnet werden.-- Einer Spalte der Art Zeichen, DBCS, Grafik oder LOB können Daten der Art Zeichen, DBCS, Grafik oder LOB (großes Objekt) zugeordnet werden.-- Einer Spalte der Art Zeichen, DBCS oder Grafik kann ein Datums-, Zeit- oder Zeitmarkenwert zugeordnet werden.-- Einer Spalte der Art Datum, Zeit oder Zeitmarke kann ein Wert der Art Zeichen, DBCS oder Grafik zugeordnet werden.-- Einem Datum kann ein Datumswert zugeordnet werden.-- Einer Uhrzeit kann ein Zeitwert zugeordnet werden.-- Einer Zeitmarke kann ein Zeitmarkenwert zugeordnet werden.-- Ein Wert, der einer benutzerdefinierten Art zugeordnet wird, muss in die Quellenart umgestuft werden können.-- Bei der Zuordnung zu einer Datalink muss die Funktion DLVALUE angegeben werden.Fehlerbeseitigung: Die Spalte, die Host-Variable, die Konstante oder die Funktion, die XTIME zugeordnet ist, so ändern, dass sie verträglich ist. Die Anforderung wiederholen.

    Kann mir jemand weiterhelfen, der schon ähnliche Erfahrungen gemacht hat?
    Vielen Dank.

    Gruß, Karo

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    nur als Idee
    Kann es sein, das das time Format im Opsnerv anders ist als das Timeformat wenn du mit SQL arbeitest ?
    Robi

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    So wie ich das sehe, ist das Zielfeld eben nicht vom Typ TIME sondern ggf. nur Typ DEC.

    In diesem Fall musst du den Zeitwert casten.
    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

  4. #4
    Registriert seit
    Mar 2005
    Beiträge
    27

    Trigger - Laufzeit zu lang

    Der Fehler kann nicht sein, denn

    1. ist das Feld XTIME nicht als DEC sondern als String definiert und
    2. selbst wenn man nur versucht einen einfachen String an das Feld zu übergeben funktionierts nicht und
    3. würde es dann auch nicht in das Feld schreiben lassen wenn ich's über zwei SQL Befehle mach. Dies funktioniert nämlich.

    Beispiel:
    Trigger XXFILE Update
    BEGIN ATOMIC
    Update XXLIB.XXFILET set lfdNummer = lfdNummer + 1, XUSER = USER, XEVEN = 'U', XSTAT = 'B', XZEIT = CURRENT TIMESTAMP;
    insert into XXLIB.XXFILE (select * from XXLIB.XXFILET, tmpalt);
    Update XXLIB.XXFILET set XSTAT = 'A';
    insert into XXLIB.XXFILE (select * from XXLIB.XXFILET, tmpneu);
    END


    4. haben wir die Zeit schonmal als Test umgestellt

    Leider ist die Lösung 3. vermutlich dafür verantwortlich, dass nun Massenjobs sehr lange laufen, wenn der Trigger eingestellt ist. Teils 5x so lang!

    Habt ihr noch weitere Ideen?

    Gruß, Karo

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo!

    Du sagst es:
    Feld XTIME nicht als DEC sondern als String

    Current_Timestamp ist jedoch eine echte Zeitmarke.
    Damit ist der Wert für die Spalte XTIME nicht verträglich.
    (Schau Dir mal spasseshalber den Hex-Wert von Current_Timestamp an:
    PHP-Code:
    Select Hex(Current_Timestampfrom SysIbm/SysDummy1 
    Du musst die Zeitmarke in ein alphanumerisches Feld umwandeln und dieses dann beim Insert, Update oder Delete verwenden.

    Aus Performancegründen würde ich die Konvertierung einmalig machen und an alle betroffenen Sätze übergeben. (Sofern es nicht genau auf den Bruchteil einer Sekunde ankommt und der ist bei Massen-Inserts, Updates oder Deletes eh' nicht eindeutig!)

    PHP-Code:
    Declare MyCharTime CHAR(20);
    Set MyCharTime CHAR(Current_TimeStamp); 
    oder

    PHP-Code:
    Update ... 
       
    Set XTime Char(Current_Timestamp); 
    Birgitta
    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

Similar Threads

  1. Operations Navigator - QSECOFR hat nur Basisfunktionen
    By cassi in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 18-01-05, 08:38
  2. Operations Navigator startet nicht
    By issvrcr in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 23-12-04, 20:57
  3. IPDS-Drucke im Operations Navigator anschauen
    By schwenth in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 04-11-04, 11:50
  4. Operations Navigator / LPAR
    By Romek in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 26-03-02, 08:00
  5. Antworten: 9
    Letzter Beitrag: 11-02-02, 07:22

Berechtigungen

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