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:
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: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;
Die Erstellung der UDF meckert, dass das "doc" ungültig sei. Ich weiß jetzt aber nicht wie ich das sonst angeben könnte.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;
Geht das überhaupt? Kann ich so einen Aufruf in eine UDF packen? Wenn ja, wie?
Gruß,
KM
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten
Bookmarks