Aufrufen von Stored Procedures mit SQL Rückgabetyp „XML“

  • Beitrag
    julianma
    Teilnehmer
    Hallo,

     

    ich möchte über den Datenbankadapter eine Stored Procedure auf einem Microsoft SQLServer aufrufen. Diese hat einen Input/Output Parameter mit dem SQL Datentyp „XML“. Wir möchten das XML dann im Transconnect gleich weiterverarbeiten und tun uns natürlich leichter, wenn das gleich auf DB Seite schon mal vorvalidiert wird.

    Hier scheitere ich aber. Ich muss beim Definieren des CALL’s beim Parameter einen Typ angeben und hier gibt es laut Handbuch kein direktes Mapping vom XML Datentyp.

    Bei Angabe von Datentyp „String“ auf Transconnect Seite antwortet die DB mit dem Fehler „Die implizierte Konvertierung vom xml-Datentyp in nvarchar ist nicht zulässig. Verwenden Sie die CONVERT-Funktion, um diese Abfrage auszuführen.“. Allerdings wüsste ich nicht, wie ich in den CALL Aufruf noch das CONVERT integrieren könnte.

    Weitere Versuche über Transconnect Datentypen CLOB/BLOB sind auch gescheitert.

     

    Gibt es hier eine weitere Möglichkeit, die ich noch nicht auf dem Schirm habe? Letzter Workaround wäre nur, den Datentypen auf Seite der Stored Procedure zu ändern.

     

    0
    0
Ansicht von 4 Antworten – 1 bis 4 (von insgesamt 4)
  • Antworten
    Bruno Schulze
    Administrator
    Hallo Julian,

    wir haben deine Anfrage in der Community gesehen und kümmern uns schnellstmöglich um eine Antwort. Bitte hab noch einen Moment Geduld, wir sind bereits dran.

    Viele Grüße

    Bruno Schulze

    Transconnect Professional Services

    0
    0
    Bruno Schulze
    Administrator
    Hallo Julian,

    um die Prozeduren aufzurufen, musst du den Datentyp „String“ verwenden. Der Ansatz war also schon richtig. Wichtig ist nur, dass der Wert, den du sendest, in ![CDATA[]]-Klammern gesetzt wird. Das CDATA ermöglicht es uns, Inhalte wie XML-Tags (<, >) oder Sonderzeichen aufzunehmen, die nicht als XML, sondern als Rohtext geparst werden.

    Hier die Prozedur mit der wir das Verhalten auf einem SQL-Server getestet haben:

    CREATE PROCEDURE sp_EchoXml
    (    @InputXml XML
    )
    AS
    BEGIN
    SET NOCOUNT ON;
    SELECT @InputXml AS OutputXml;
    END;

    Mit folgenden DB-Aufruf in Transconnect:
    <ROOT>
    <CALL NAME=“dbo.sp_EchoXml“ NAMEDPARAMS=“false“>
    <RETURN TYPE=“String“ />
    <PARAM TYPE=“String“ MODE=“in“ NULL=“false“><![CDATA[<ROOT><TEST1>test</TEST1></ROOT>]]></PARAM>
    </CALL>
    </ROOT>

    Im Anhang findest du zudem die Rückmeldung von Transconnect, wenn der Aufruf erfolgreich war, und ein Beispiel, wie man das CDATA in eine Transformation einbauen kann, um weiterhin klassische XSLT-Funktionen nutzen zu können.

     

    Viele Grüße

    Bruno Schulze
    Professional Services

     

    0
    0
    julianma
    Teilnehmer
    Vielen Dank erstmal für die Unterstützung. Ich fürchte, ich hab mich in meiner Eingangsfrage etwas unklar ausgedrückt.

    Mein Problem besteht darin, dass der Output-Parameter vom Typ XML ist. Also es geht nicht daran, XML Inhalte an die Prozedur zu übergeben, sondern dass die Rückgabe im Transconnect landet. Konkret wäre das Beispiel von Ihnen also folgendermaßen zu ändern:

    CREATE or alter PROCEDURE sp_EchoXml
    ( @InputXml XML output
    )
    AS
    BEGIN
    SET NOCOUNT ON;
    SELECT @InputXml AS OutputXml;
    END;

     

    sowie im CALL wäre der PARAM auf MODE=“inout“ zu ändern.

    0
    0
    Bruno Schulze
    Administrator
    Hallo Julian,

    nach der Anpassung der Prozedur kommen wir zum gleichen Ergebnis. Die Rückgabe als ‚XML output‚ bzw. über einen Parameter ist derzeit noch nicht implementiert (aktuelle Java-Typen in Kapitel 9.4 Datenbank). Momentan kann das XML nur als einfaches Rückgabeobjekt genutzt werden.

    Wir werden die Unterstützung des java.sql.Types.SQLXML so bald wie möglich implementieren. Wir können euch auch gern unterstützen, das Problem vorläufig über den bestehenden Prozess zu lösen? Melde dich gern bei uns.

     

    Viele Grüße

    Bruno Schulze
    Proffesional Services

    0
    0
Ansicht von 4 Antworten – 1 bis 4 (von insgesamt 4)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.