[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2005
    Beiträge
    55

    problem mit eigener sql function

    hallo forum

    also ich mache die function mit dem operrationsnavigator

    erste seite: (allgemein)
    name: llerzbez
    rück: character
    35

    Liest SQL-Daten

    seite ( parameter)
    prm_phznr character 7

    seite (SQL-Statment)
    PHP-Code:
     
    BEGIN 
    DECLARE BEZ CHAR 35 ) ;
     
    SELECT 
    CASE 
    WHEN ARERZNR 3 THEN AGIBEZ 
    WHEN ARERZNR 
    <> 3 THEN ENAME1 
    END 
    AS BEZ1 INTO BEZ 
    FROM LLART 
    LLERZ 
    LEFT OUTER JOIN LLARTGRE ON ARARTGRE 
    AGEARTGRE 
    AND AGEERZNR ARERZNR 
    LEFT OUTER JOIN LLARTGRI ON AGEARTGRI 
    AGIARTGRI 
    WHERE ARERZNR 
    EERZNR AND ARPHZNR PRM_PHZNR ;
    RETURN 
    BEZ ;
    END 
    nach dem erstellen auf ok.
    wird ganz normal umgewandelt und ein srvpgm erstellt.

    wenn ich jetzt aber die funktion im interaktiven sql verwenden möchte geht nichts.
    PHP-Code:
    select LLERZBEZ('1811344'from llart where arphznr '1811344' 
     
    // folgender fehler
    select LLERZBEZ('1811344'from llart where arphznr '1811344'
    LLERZBEZ der Art *N in *LIBL nicht gefunden
    wo ist mein fehler ??

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Wie ist denn der Eingabeparameter definiert ?
    Für einen korrekten Funktionsaufruf muss das Format der Eingabedaten 100%ig dem Format der Definition entsprechen.

    Man kann nämlich mehrere Funktionen mit gleichem Namen aber unterschiedlichen Parametern definieren.

    Für den korrekten Aufruf ist ggf. ein Cast erforderlich:
    Ist. z.B. der Eingabeparameter CHAR(10):
    select LLERZBEZ(cast('1811344' as char(10)) from llart where arphznr = '1811344'
    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
    May 2005
    Beiträge
    55
    danke für die schnelle antwort.

    also der aufruf geht jetzt aber gleich darauf bekomme ich diesen fehler

    PHP-Code:
    LLART in Bibliothek LLDATA aufDer Fehlercode ist 1. Fehlercodes und ihre
    Bedeutung
    :                                                                
      
    -- Das externe Programm oder Serviceprogramm hat SQLSTATE 42704       
    zurückgegeben
    . Die vom Programm zurückgegebene Textnachricht ist:         
    LLARTQPGMRFILE   n QPGMR nicht gefunden. . 

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich denke du musst die Dateien mit der Lib qualifizieren !
    Wenn nichts explizit gesagt wird, wird eine Tabelle in der Lib mit dem Usernamen gesucht. In deinem Fall anscheinend QPGMR.

    Desweiteren musst du den Fehlerfall des Select's (keine Daten) abfangen und NULL zurückgeben.
    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
    May 2005
    Beiträge
    55
    super danke jetzt hauts hin

    die qualifizierung geht aber mit punkt

    lib.datei

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Hallo Stefan,

    werden alphanumerische Ausdrücke in einem Funktions-Aufruf angegeben, werden diese Ausdrücke als alphanumerische Datentypen mit variabler Länge (VARCHAR) interpretiert.

    Da Funktionen überladen werden können, d.h. der gleiche Funktions-Name kann mit unterschiedlicher Parameter-Defintion mehrfach verwendet werden können und für SQL CHAR und VARCHAR unterschiedliche Datentypen sind, wird die Funktion nicht gefunden. SQL sucht nach einer Funktion, deren Parameter VARCHAR ist. Um dieses Problem zu umgehen, musst Du den alphanumerischen Ausdruck in einen Parameter mit fixer Länge umwandeln.
    Dies geschieht entweder durch die Verwendung der skalaren Funktion CHAR oder durch CAST.
    (CAST sollte aufgrund des SQL-Standards bevorzugt werden.)

    PHP-Code:
    select LLERZBEZ(Cast('1811344' as Char(35))) 
       
    from llart 
       where arphznr 
    '1811344' 
    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
    May 2005
    Beiträge
    55
    super erklärung
    ich wollte nämlich schon fragen obs möglich ist die parameter per value zu übergeben.

    hat sich somit erledigt

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Durch SQL werden die Parameter immer per Value übergeben. Mit den Variablen kann man beliebig arbeiten, da SQL die Inhalte niemals zurückgibt.

    Aber Vorsicht:
    SQL-Funktionen sind ganz normale Programme/Prozeduren, die auch per CALL aufgerufen werden können.
    In diesem Fall muss der Prototyp die VALUE-Klausel enthalten damit der RPG-Compiler Kopierroutinen einbaut.
    Sonst würden die Parameter per Reference übergeben (was es eigentlich immer ist) und Änderungen der Inhalte nach oben wirken !!!
    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
    Feb 2001
    Beiträge
    20.241
    Die Namenskonvention ist default SQL. Dadurch ergibt sich als Trenner der Punkt.
    Mittels "set option ..." können diverse Ergänzungen gemacht werden die ggf. nicht unwichtig sind.
    Insbesonders eben
    naming=*sql/*sys
    dftrdbcol=libxxx <= Bei *sql eben USER, bei *sys=*LIBL
    commit=*none/*chg/... <= Bei Updates ganz wichtig
    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. SQL UDF Function ausführung mit Fehler
    By jakarto in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-07-06, 13:41
  2. SQL Problem
    By Lucky4712 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-05-06, 15:57
  3. CREATE SQL FUNCTION
    By Xanas in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 23-02-06, 10:29
  4. Problem bei Abfrage bei Imbedded SQL
    By cbe in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-06-05, 16:21
  5. embedded SQL Performance Problem mit SCROLL
    By itec01 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 16-09-04, 18:38

Berechtigungen

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