Hallo.
Ich sitze im Moment an einem Projekt, wo ein kleiner Teil abgespalten werden soll, welcher unter Firebird (aktuelle 2.1 Version) laufen muss.
Das ganze läuft ursprünglich unter Sybase (iAny 10).
Jetzt stehe ich vor dem Problem, dass ich die Funktionen vom Sybase nicht nachbilden kann. Diese Funktionen sollen von der Datenbank selbst und vom Programm aus aufrufbar sein.
Ich habe mir eine SP geschrieben, kann sie aber nicht innerhalb eines Selects aufrufen. Kann man das grundsätzlich irgendwie hin bekommen? Also dass man innerhalb des Selects die SP aufruft und sie halt für die eine (aufrufende) Zeile den Wert zurück gibt?
Mal das ganze an einem Beispiel.
Folgende SP soll die Langtexte auslesen und in eine extra Blob-Tabelle schreiben (falls noch nicht vorhanden da sie sich oft wiederholen) und die ID zurück geben zum passenden Text.
Die SP sieht so aus:
LONGMD5 ist dabei eine UDF, die soweit auch funktioniert (in verschiedenen Selects schon ausprobiert).
Jetzt habe ich versucht das zu Testen.
Erwarten würde ich nun einen Text und die passende ID, welche im Hintergrund Transparant eingetragen wurde. Ich bekomme jedoch die Fehlermeldung die Funktion GETLONGTEXT wäre nicht bekannt.
Wie kann ich das also so hinbasteln, dass das funktioniert?
Ich sitze im Moment an einem Projekt, wo ein kleiner Teil abgespalten werden soll, welcher unter Firebird (aktuelle 2.1 Version) laufen muss.
Das ganze läuft ursprünglich unter Sybase (iAny 10).
Jetzt stehe ich vor dem Problem, dass ich die Funktionen vom Sybase nicht nachbilden kann. Diese Funktionen sollen von der Datenbank selbst und vom Programm aus aufrufbar sein.
Ich habe mir eine SP geschrieben, kann sie aber nicht innerhalb eines Selects aufrufen. Kann man das grundsätzlich irgendwie hin bekommen? Also dass man innerhalb des Selects die SP aufruft und sie halt für die eine (aufrufende) Zeile den Wert zurück gibt?
Mal das ganze an einem Beispiel.
Folgende SP soll die Langtexte auslesen und in eine extra Blob-Tabelle schreiben (falls noch nicht vorhanden da sie sich oft wiederholen) und die ID zurück geben zum passenden Text.
Die SP sieht so aus:
Code:
CREATE PROCEDURE GETLONGTEXT( LONGTEXT BLOB SUB_TYPE 1 CHARACTER SET ISO8859_1 DEFAULT NULL) RETURNS( TEXTID BIGINT) AS DECLARE VARIABLE HashValue VARCHAR(32) CHARACTER SET ISO8859_1; DECLARE VARIABLE CountExists integer; BEGIN HashValue = LONGMD5(LONGTEXT); select count(LongTextID) from LongTexts where TextHash=:HashValue and TextContent=:LONGTEXT into :CountExists; IF (:CountExists = 0) THEN BEGIN INSERT INTO LongTexts (TextHash, TextContent) VALUES (:HashValue, :LongText); END select LongTextID from LongTexts where TextHash=:HashValue and TextContent=:LONGTEXT into :TEXTID; SUSPEND; END;
Jetzt habe ich versucht das zu Testen.
Code:
select DescriptionText, GETLONGTEXT(DescriptionText) from DocumentStore where StoreID=xxx
Wie kann ich das also so hinbasteln, dass das funktioniert?
Comment