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

    Angry SQL: Ausführungsverhalten einer Funktion in einem CASE-Statement

    Hallo,

    ich habe bei einer SQL-Abfrage in einem ELSE-Zweig eines CASE-Ausdruckes die Ausführung einer SQL-Funktion, die eine sehr zeitintensive RPG-Funktion aufruft:

    SELECT ....

    CASE WHEN MDMUS1<>'' THEN MDMUS1 ELSE MOD_getMKZ(afpmdt,afpmod,aumpgm,afpbsd) END

    ... FROM ...

    Bedingt durch die Angabe der Funktion in dem ELSE-Zweig war ich davon ausgegangen, das die Funktion nur dann aufgerufen wird, wenn der ELSE-Zweig auch zur Anwendung kommt. Durch den I/O-Zähler in der Anzeige der offenen Dateien kann ich aber feststellen, das die Funktion für jeder Zeile der Abfrage ausgeführt wird und dadurch wird die Abfrage sehr langsam wird (167198 zu 12417 notwendige Aufrufe).

    Hat jemand schon Erfahrungen mit diesem Thema gemacht? Gibt es eine Möglichkeit dieses Verhalten abzustellen?

    M.Withake

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    ich denke, das man das nicht beeinflussen kann, was der Query Pessimizer sich da so zurecht denkt. Als Work around könnte man den Modus mit übergeben und wenn da wirklich was kommt, selbiges stumpf zurück geben ohne was aufzurufen.

    mfg

    Dieter Bender

    Zitat Zitat von mwithake
    Hallo,

    ich habe bei einer SQL-Abfrage in einem ELSE-Zweig eines CASE-Ausdruckes die Ausführung einer SQL-Funktion, die eine sehr zeitintensive RPG-Funktion aufruft:

    SELECT ....

    CASE WHEN MDMUS1<>'' THEN MDMUS1 ELSE MOD_getMKZ(afpmdt,afpmod,aumpgm,afpbsd) END

    ... FROM ...

    Bedingt durch die Angabe der Funktion in dem ELSE-Zweig war ich davon ausgegangen, das die Funktion nur dann aufgerufen wird, wenn der ELSE-Zweig auch zur Anwendung kommt. Durch den I/O-Zähler in der Anzeige der offenen Dateien kann ich aber feststellen, das die Funktion für jeder Zeile der Abfrage ausgeführt wird und dadurch wird die Abfrage sehr langsam wird (167198 zu 12417 notwendige Aufrufe).

    Hat jemand schon Erfahrungen mit diesem Thema gemacht? Gibt es eine Möglichkeit dieses Verhalten abzustellen?

    M.Withake
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Feb 2008
    Beiträge
    1

    Es gibt ein PTF

    Wir benutzen iseries V 5.4. Auch wir hatten ein solches Problem mit dem "CASE".

    IBM hat aufgrund unserer Meldung ein PTF MF45019/MF45020 erstellt. Dieses beseitigt das Problem für die SQE. Es tritt jedoch weiterhin für die CQE auf und IBM beabsichtigt nicht es für die CQE zu fixen.

    Da wir auch noch weitere Bugs im DB2 gefunden haben, die ebenfalls behoben wurden, sollte man auf jeden Fall den neuesten PTF-Stand auf der Maschine haben.

Similar Threads

  1. SQL Case von mehreren Dateien
    By steven_r in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 08-08-06, 09:34
  2. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47
  3. sql funktion
    By steven_r in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 01-06-06, 12:16
  4. Erstellen Trigger über SQL / Read Funktion
    By GHoffmann in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 07-07-05, 09:18
  5. SQL Statement
    By juergenkemeter in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 15-11-04, 12:15

Berechtigungen

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