[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012

    SQL-Aufruf eines Webservices in SQL-Funktion einbauen

    Hallo,

    ich habe zur Ermittlung der Ähnlichkeit zweier Texte einen REST-Webservice erstellt. Diesen kann ich per SQL auch problemlos aufrufen. Das sieht z.B. folgendermaßen aus:

    Code:
    SELECT *
    FROM XMLTABLE('$doc/levenshteinData'
          PASSING
          XMLPARSE(DOCUMENT SYSTOOLS.HTTPGETCLOB
    ('http://ban:8080/webservices/levenshtein/text1/' concat systools.urlencode('Muhammad', 'UTF-8') concat '/text2/' concat systools.urlencode('Mohammed', 'UTF-8'),''))
    AS "doc"
    COLUMNS
    	Text1 VARCHAR(1000) PATH 'text1',
    	Text2 VARCHAR(1000) PATH 'text2',
    	Similarity DECIMAL(5, 2) PATH 'similarity'
    ) AS WebServiceResult;
    Jetzt würde ich das gerne in eine SQL-UDF einbauen, der ich die beiden Texte als Parameter übergebe und dann den Ergebniswert zurückgebe. Das habe ich so versucht:

    Code:
    CREATE OR REPLACE FUNCTION DTOBJ/GETSIMILARITY (
     P_TEXT1 VARCHAR(1000) ,
     P_TEXT2 VARCHAR(1000))
    
     RETURNS DECIMAL(5, 2)
     LANGUAGE SQL
     SPECIFIC DTOBJ/GETSIMILARITY
     NOT DETERMINISTIC
     READS SQL DATA
     CALLED ON NULL INPUT
    
    BEGIN
     -- Variablen
     DECLARE SIMILAR DECIMAL(5, 2) DEFAULT 0;
    
     SELECT Similarity into SIMILAR
    FROM XMLTABLE('$doc/levenshteinData'
          PASSING
          XMLPARSE(DOCUMENT SYSTOOLS.HTTPGETCLOB
    ('http://ban:8080/webservices/levenshtein/text1/' concat systools.urlencode(P_TEXT1, 'UTF-8') concat '/text2/' concat systools.urlencode(P_TEXT2, 'UTF-8'),''))
    AS "doc"
    COLUMNS
    	Text1 VARCHAR(1000) PATH 'text1',
    	Text2 VARCHAR(1000) PATH 'text2',
    	Similarity DECIMAL(5, 2) PATH 'similarity'
    ) AS WebServiceResult;
    
     RETURN SIMILAR;
    END;
    Die Erstellung der UDF meckert, dass das "doc" ungültig sei. Ich weiß jetzt aber nicht wie ich das sonst angeben könnte.

    Geht das überhaupt? Kann ich so einen Aufruf in eine UDF packen? Wenn ja, wie?

    Gruß,
    KM

  2. #2
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Ich hab jetzt selbst die Lösung gefunden...

    Der Fehler trat nur auf, wenn ich die UDF per Script mit RUNSQLSTM erstellen wollte. Mit dem System i Navigator hat es schließlich funktioniert.

    Gruß,
    KM

  3. #3
    Registriert seit
    Nov 2003
    Beiträge
    2.402
    Vielleicht ein CCSID-Problem mit dem $-Zeichen?

  4. #4
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Nein, am $-Zeichen liegt das nicht. Scheint eher ein Problem mit dem RUNSQLSTM zu sein.

    Wie gesagt mit dem System i Navigator hat es ja funktioniert.

    Gruß,
    KM

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Kann es sein, dass Du im Skript über die Position 80 hinausgeschrieben hast, jedoch die Option MARGINS im Befehl RUNSQLSTM nicht verändert hast?

    Wenn ich dein Beispiel anschaue, kommst du sicher über 80 Zeichen in der Breite, d.h. die halbe Zeile wurde einfach abgeschnitten und dann ist as "Doc" natürlich nicht zulässig.

    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

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von KM Beitrag anzeigen
    Nein, am $-Zeichen liegt das nicht. Scheint eher ein Problem mit dem RUNSQLSTM zu sein.

    Wie gesagt mit dem System i Navigator hat es ja funktioniert.
    Der Navigator verwendet eine andere Umgebung (CCSID, Datumsformat, usw.). Da kann es durchaus sein dass es nicht am RUNSQLSTM liegt sondern was anderen.
    Wäre nicht das erste mal dass im Navigator was geht was im 5250 nicht geht oder umgekehrt.

    lg Andreas

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Das $ Zeichen is Teil der Syntax, da hat er keine andere Wahl (außer auf die Benennung zu verzichten)

    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

  8. #8
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    @Birgitta:
    Stimmt, es lag tatsächlich an der Breite. Ich wusste nicht, dass der RUNSQLSTM standardmäßig auf 80 Stellen eingestellt ist. Ich hab den Wert jetzt mal vergrößert. Jetzt funktioniert's.

    Vielen Dank,
    KM

Similar Threads

  1. REST Webservices / Verwendung von SYSTOOLS
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 25
    Letzter Beitrag: 14-02-18, 11:11
  2. RDI - Aufruf eines Programms vorm Öffnen einer Source
    By homue in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 03-02-16, 14:06
  3. Antworten: 7
    Letzter Beitrag: 13-01-15, 16:43
  4. Bibliotheksnamen Variable im Query einbauen?
    By DEVJO in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 06-03-03, 11:35
  5. Kostenloser id@y Webservices mit .NET am 28.11. in Burghausen
    By ppedv in forum Archiv NEWSboard Events
    Antworten: 0
    Letzter Beitrag: 24-10-02, 09:58

Berechtigungen

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