[NEWSboard IBMi Forum]

Thema: SQL 400 UDF

  1. #1
    Registriert seit
    Jan 2006
    Beiträge
    2

    SQL 400 UDF

    I5 9406/520 RE: V5R3M0 L00

    Hallo Leute,

    habe mich als Anfänger in SQL an den User Defined Functions versucht.

    Ich fand dazu ein Beispiel in der IBM Lektüre, dass ich nach zu vollziehen versuchte.
    Hier der Code zum erstellen der Funktion:

    CREATE FUNCTION SAMPLE.ABTMA(DEPTNO CHAR(3))
    RETURNS TABLE (EMPNO CHAR(6),
    LASTNAME VARCHAR(15),
    FIRSTNAME VARCHAR(12))
    LANGUAGE SQL
    READS SQL DATA
    NO EXTERNAL ACTION
    DETERMINISTIC
    DISALLOW PARALLEL
    RETURN
    SELECT EMPNO,LASTNAME,FIRSTNME
    FROM SAMPLE.EMPLOYEE
    WHERE WORKDEPT =ABTMA.DEPTNO

    Die Funktion wurde problemlos in der Bibl. SAMPLE erstellt und steht dort als
    Objekt Art Bibliothek Attribut Text
    ABTMA *SRVPGM SAMPLE CLE SQL FUNCTION ABTM

    Danach wollte ich die Funktion mit folgendem SELECT testen:

    SELECT EMPNO, LASTNAME, FIRSTNAME
    FROM TABLE(ABTMA ('A00')) AS D

    Nach diesem Aufruf kommt folgende Fehlermeldung :

    SQL-Status: 42704
    Vendorencode: -204
    Nachricht: [SQL0204] ABTMA der Art *N in *LIBL nicht gefunden. Ursache . . . . : ABTMA der Art *N in *LIBL wurde nicht gefunden. Handelt es sich um eine Anweisung ALTER TABLE und ist die Art *N, wurde eine Integritätsbedingung oder Partitionierung nicht gefunden. Ist dies keine Anweisung ALTER TABLE und ist die Art *N, wurde eine Funktion, eine Prozedur oder ein Auslöser nicht gefunden. Wurde eine Funktion nicht gefunden, ist ABTMA das Serviceprogramm, das die Funktion enthält. Die Funktion wird nur gefunden, wenn der externe Name und der Verwendungsname exakt übereinstimmen. Im Jobprotokoll nach einer Nachricht suchen, die weitere Einzelheiten über den gesuchten Funktionsnamen und den nicht übereinstimmenden Namen enthält. Fehlerbeseitigung: Den Namen ändern und die Anforderung wiederholen. Ist das Objekt eine Knotengruppe, sicherstellen, dass DB2 Multisystem auf dem System installiert ist, und mit dem CL-Befehl CRTNODGRP eine Knotengruppe erstellen. Wurde eine externe Funktion nicht gefunden, das Groß-/Kleinscheibung des EXTERNAL NAME der Anweisung CREATE FUNCTION exakt mit der Groß-/Kleinschreibung des vom Serviceprogramm exportierten Namens übereinstimmen.

    Verarbeitung wurde beendet, da die hervorgehobene Anweisung nicht erfolgreich abgeschlossen werden konnte.


    Hat jemand eine Erklärung dafür, warum die UDF nicht gefunden wurde?

    Besten Dank im voraus für Eure Hilfe

    Gruß

    Stefan

  2. #2
    Registriert seit
    Oct 2003
    Beiträge
    192
    Bibliotheksliste ist korrekt gesetzt ?

    Datei EMPLOYEE ist in der Bibliotheksliste ?

    Gruß
    Rince

    /edit/
    Eventuell muss man das SAMPLE auch im Binddirectory eintragen ?

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.873

    Übergabe von Ausdrücken

    Hallo,

    Dein Problem liegt darin, dass der Parameter als Ausruck übergeben wurde. Ausdrücke werden von SQL als Datentyp VARCHAR interpretiert. VARCHAR und CHAR werden von SQL als unterschiedliche Datentypen gehandelt. Da SQL-Funktionen überladen werden können, wird nach einer Funktion gesucht, die einen VARCHAR-Parameter hat. Diese wird jedoch nicht gefunden.

    Langer Rede kurzer Sinn. Du müsstest die Funktion aufrufen können, wenn Du den Ausdruck in einen CHAR-Datentyp umwandelst:

    PHP-Code:
    SELECT  EMPNOLASTNAMEFIRSTNAME 
       FROM TABLE
    (ABTMA (cast('A00' as Char(3)))) AS D
    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

  4. #4
    Registriert seit
    Jan 2006
    Beiträge
    2
    Hallo Brigitta,

    das war es.

    Besten Dank für deine Hilfe

    MfG

    Stefan

Similar Threads

  1. Antworten: 11
    Letzter Beitrag: 18-07-16, 09:49
  2. UDF nicht verwendbar
    By Peder in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 06-12-06, 08:15
  3. SQL UDF Function ausführung mit Fehler
    By jakarto in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-07-06, 13:41
  4. SQL UDF Prob mit leeren Feldern
    By HACHIMAN in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 22-05-06, 09:48
  5. DB2 400 SQL Join Problem
    By pfpk0997 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 28-02-06, 18:39

Berechtigungen

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