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