[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jul 2005
    Beiträge
    232

    Jobname im SQL ermittlen

    Hallo liebe Forumsmitglieder,

    ich suche eine performante Möglichkeit, im SQL den Jobnamen und Jobnummer zu ermitteln. Ist für einen Trigger erforderlich, welcher diese Daten wegschreiben soll.
    Den User kann ich ja mit

    SELECT USER FROM SYSIBM.SYSDUMMY1 ermitteln. Finde aber nichts, wie ich den gesamten Job bekomme. Ein separater Programmaufruf ist mir aber zu langsam.

    Any idea ?
    __________________________________
    -An eye for an eye leaves the whole world blind- -Mahatma Ghandi-

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.242
    Dies kannst du nur mit einer externen SQL-Funktion, CLP mit RTVJOBA oder RPG/LE aus der SDS ermitteln.
    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

  3. #3
    Registriert seit
    Jul 2005
    Beiträge
    232
    Danke, dann werd ich das wohl so machen müssen.
    __________________________________
    -An eye for an eye leaves the whole world blind- -Mahatma Ghandi-

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.242
    die Performance ist ggf. auch zu vernachlässigen, da du diese Funktion nicht unbedingt bei jedem Aufruf benötigst.
    In einer externen SQL-Funktion/Prozedur kann ich das in einer statischen Variablen speichern.
    Bei nativen SQL-Prozeduren wirds da schon schwieriger.
    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

  5. #5
    Registriert seit
    Jan 2008
    Beiträge
    90

    Job im SQL feststellen

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Dies kannst du nur mit einer externen SQL-Funktion, CLP mit RTVJOBA oder RPG/LE aus der SDS ermitteln.
    Hallo!

    Ich habe genau das gleiche Problem, schaffe es aber nicht mit der Ext. Function.

    Hab mir ein CL gemacht, welches mit Job u. Nr zurückliefert:

    PGM PARM(&JOB_JOBNR)
    DCL &JOB_JOBNR *CHAR 17
    DCL &JOB *CHAR 10
    DCL &JOBNR *CHAR 6
    RTVJOBA JOB(&JOB) NBR(&JOBNR)
    CHGVAR VAR(&JOB_JOBNR) VALUE(&JOB *CAT ' ' *CAT &JOBNR)
    ENDPGM


    Hab auch schon in der SQL-Referenz über die Erstellung von ext. Functions nachgelesen, aber es funktioniert nicht.

    Kann mir bitte jemand helfen?

    Danke,
    Günter

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    Was klappt wo nicht?
    Ein bisschen mehr Informationen bräuchten wir schon.

    Wird die Stored Procedure nicht erstellt?
    Wie sieht der CREATE-Befehl für die Stored Procedure aus?
    Tritt das Problem beim Aufruf auf?
    Wie sind die Variablen im SQL definiert, wie wird die Prozedur aufgerufen?

    Birgitta
    Birgitta Hauser

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

  7. #7
    Registriert seit
    Jan 2008
    Beiträge
    90
    Hallo!

    Naja, ich möchte gern wissen, wie genau eine ext. Funct. definiert werden muß, die dann den Jobnamen und die Jobnummer liefert.

    Ich habe mal obiges CL erstellt, welches das grundsätzlich erledigt.

    Wenn ich dann z.B. eine Function so erstelle u. verwende:

    create function sqljob ()
    RETURNS TABLE (job_jobnr CHAR(17))
    EXTERNAL NAME sqljob
    LANGUAGE CL
    PARAMETER STYLE DB2SQL
    NO SQL
    DETERMINISTIC
    NO EXTERNAL ACTION
    CALLED ON NULL INPUT
    DISALLOW PARALLEL
    Routine SQLJOB wurde erstellt, kann aber nicht gesichert oder zurück
    select sqljob() from dual
    Verwendung von Funktion SQLJOB ungültig.


    Hab aber auch schon andere Varianten probiert (z.B. mit RETURNS CHAR), aber ich will es eigentlich nicht durch Herumprobieren herausfinden, wie die ext. Funct. dann richtig erstellt werden soll.

    Die Tabelle DUAL hab ich mir aus meiner Oracle-Zeit mitübernommen. Ist eine Tabelle mit einem Feld und einem Wert. Macht eigentlich das gleiche wie mit SYSDUMMY1.

    Danke,
    Günter

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.242
    Ein CLP kann keine TABLE zurückgeben sondern halt nur einen Wert.
    Eine TABLE geht nur mittles RPGLE und einer DS.
    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

  9. #9
    Registriert seit
    Jan 2008
    Beiträge
    90
    Hallo!

    Ja, klar, hab das so vom SQL-Referece-Manual übernommen.

    Ich will eigentlich nur wissen, wie in einer SQL-Abfrage in einem Trigger der Job ermittelt werden kann. Genau so wie es im ersten Beitrag des Threads gefragt wird.

    Danke,
    Günter

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    Heißt das, dass Du einen SQL Trigger hast, in dem Du den aktuellen Job-Namen und die Job-Nr. benutzen willst?

    In diesem Fall würde ich anstatt einer Funktion eine Stored Procedure schreiben, die dann über den SQL-Befehl CALL aufgerufen wird.

    Eine Funktion zu schreiben ist mit CL etwas komplexer, da CL zum einen selber keine Rückgabe-Werte unterstützt und zum anderen bei Parametertyp DB2SQL ein Wust von zusätzlichen Parametern definiert werden muss.

    PHP-Code:
    CREATE PROCEDURE MYSCHEMA/GETJOBQUAL 
        
    OUT POUTJOB CHAR(17)) 
        
    LANGUAGE CL 
        SPECIFIC MYSCHEMA
    /GETJOBQUAL 
        DETERMINISTIC 
        NO SQL 
        CALLED ON NULL INPUT 
        EXTERNAL NAME 
    'MYSCHEMA/GETJOBQUAL ' 
        
    PARAMETER STYLE GENERAL 
    SQL Trigger:
    PHP-Code:
    ...
    Begin
       
    Declare CurrJob Char(17);
       
    Call GetJobQual(CurrJob);
    ...
    End 
    Birgitta
    Birgitta Hauser

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

  11. #11
    Registriert seit
    Jan 2008
    Beiträge
    90
    Hallo!

    Danke, ich merke schon, das führt zu nichts.

    Wir haben hier das Problem, daß aus einer Tabelle "von niemanden" Daten gelöscht werden.
    Also muß es ein Batch-Job sein (Schnittstelle, etc.).
    Dazu habe ich einen Trigger auf die Datei gelegt, die die Daten beim Löschen in eine andere Tabelle wegkopiert und zusätzliche Infos, wie Jobname, JobNr, Benutzer und genaue Uhrzeit protokolliert.

    Bis auf die Jobattribute ist alles fertig.

    Es scheint mir aber der Aufwand dafür nicht in der Relation zu stehen, jetzt einen Exkurs in die Weiten von PHP, etc. zu machen, nur um für etwa eine Woche den Trigger laufen zu lassen. Denn dann dürfte das Problem behoben sein.

    Da ja die genaue Zeit bekannt ist, werde ich einfach ins Joblog schauen und dort suchen, was da gelaufen ist.

    Nochmal Danke,
    Günter

  12. #12
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    ich verstehe ehrlich gesagt Dein Problem nicht!
    Du hast noch nicht einmal die Frage beantwortet, ob es sich um einen SQL oder externen Trigger handelt!

    Warum muss es unbedingt eine Funktion sein?!

    Was spricht dagegen das CL als Stored Procedure zu registrieren (den CREATE PROCEDURE-Befehl habe ich im letzten Post angegeben), in Deinem Trigger über einen CALL aufzurufen (ebenfalls im letzten Post angegeben) und das Ergebnis, das Du ja als Output Parameter zurückbekommst in den nächsten Datensatz (der Insert fehlt im Post) zu schreiben.

    ... und glaub' mir das geht! Genau so funktioniert es in unseren SQL Triggern!

    Birgitta
    Birgitta Hauser

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

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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