Gespeicherte Prozeduren
Gespeicherte Prozeduren sind Programme, die auf einem Datenbankserver gehostet und ausgeführt werden. Gespeicherte Prozeduren können von Client-Applikationen aufgerufen werden. Oft werden sie in einem erweiterten SQL-Dialekt geschrieben. Einige Datenbanken unterstützen auch Implementierungen in Java, .NET CLP oder anderen Programmiersprachen.
Normalerweise dienen gespeicherte Prozeduren zur Abfrage von Datenbanken und der Rückgabe der Daten an den aufrufenden Client. Oder es werden damit, nachdem Input-Parameter zusätzlich validiert wurden, Änderungen an der Datenbank vorgenommen. Mit gespeicherten Prozeduren können aber auch andere Aktionen außerhalb von Datenbanken ausgeführt werden - z.B. können damit E-Mails gesendet werden.
Eine gespeicherte Prozedur kann null oder mehr Input- und Output-Parameter haben und zusätzlich zum Standardrückgabewert optional null oder mehr Datensatzstrukturen zurückgeben. Folglich können Sie eine gespeicherte Prozedur in MapForce auf verschiedene Arten aufrufen:
•Sie können eine gespeicherte Prozedur aufrufen, um Daten abzurufen, als wären diese eine Quellkomponente im Mapping. Dies gilt für Prozeduren, die keine Input-Parameter haben. Die Prozedur wird bei der Ausführung des Mappings aufgerufen und gibt eine Datensatzstruktur oder Output-Parameter zurück. Sie können die Datensatzstruktur oder die Output-Parameter oder beides auf jeden anderen von MapForce unterstützten Datentyp mappen. Ein Beispiel dazu finden Sie unter Gespeicherte Prozeduren als Datenquelle.
•Sie können eine gespeicherte Prozedur als funktionsähnlichen Aufruf mit Parametern verwenden. In diesem Fall stellen Sie alle erforderlichen Input-Parameter über das Mapping bereit und können auch die zurückgegebene Datensatzstruktur oder die Output-Parameter oder beides auf eine andere von MapForce unterstützte Zielkomponente mappen. Ein Beispiel dazu finden Sie unter Gespeicherte Prozeduren mit Input und Output.
•Sie können eine gespeicherte Prozedur aufrufen, als würde es sich dabei um eine Zielkomponente im Mapping handeln. Ein typisches Anwendungsbeispiel wäre der Aufruf einer gespeicherten Prozedur mit Parametern, um die Datenbank zu bearbeiten (z.B. um einen Datensatz einzufügen). Diese Methode eignet sich dann, wenn Sie keinen Output aus der gespeicherten Prozedur benötigen. Bei dieser Methode können Sie die gespeicherte Prozedur auch innerhalb einer Datenbanktransaktion, die im Fall eines Fehlers mittels Rollback rückgängig gemacht werden kann, ausführen. Ein Beispiel dazu finden Sie unter Gespeicherte Prozeduren in Zielkomponeten.
In manchen Fällen müssen gespeicherte Prozeduren oder Aktionen an Datenbanktabellen in einer bestimmten Reihenfolge (zuerst einfügen, dann aktualisieren, usw.) ausgeführt werden. So muss z.B. eventuell der Output-Parameter einer gespeicherten Prozedur an eine andere gespeicherte Prozedur übergeben werden oder von einer gespeicherten Prozedur zurückgegebene Daten müssen mit Daten aus einer Tabelle kombiniert werden. Solche Aktionen lassen sich mit Hilfe lokaler, in MapForce definierter Beziehungen durchführen, selbst wenn die zugrunde liegende Datenbank Primär-/Sekundärschlüsselbeziehungen zwischen Tabellen nicht erzwingt. Nähere Informationen dazu finden Sie unter Gespeicherte Prozeduren und lokale Beziehungen.
Anmerkung: | Zur Veranschaulichung der Implementierung gespeicherter Prozeduren in MapForce werden in diesem Abschnitt Microsoft SQL Server 2016 und die "AdventureWorks 2016"-Datenbank verwendet. Zweitere kann von (https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks) heruntergeladen werden. |
Anmerkungen zur Unterstützung
•Gespeicherte Prozeduren können nur im BUILT-IN-Ausführungsprozessor verwendet werden. Die Codegenerierung in C++, C# oder Java wird nicht unterstützt.
•Benutzerdefinierte Typen, Cursor-Typen, Variante-Typen und viele "exotische" datenbankspezifische Datentypen (z.B. Arrays, Geometrieparameter, CLR-Typen) werden im Allgemeinen als Input- oder Output-Parametertypen nicht unterstützt.
•Das Überladen von Prozeduren und Funktionen (mehrere Definitionen von Routinen mit demselben Namen und unterschiedlichen Parametern) wird nicht unterstützt.
•Einige Datenbanken unterstützen Standardwerte für Input-Parameter. Diese Funktion wird derzeit nicht unterstützt. Sie können Input-Parameter im Mapping nicht weglassen und stattdessen den Standardwert verwenden.
•Gespeicherte Prozeduren, die mehrere Datensatzstrukturen zurückgeben, werden je nach Treiber- und Datenbank-API-Kombination (ODBC/ADO/ADO.NET/JDBC) unterstützt. Es werden nur Prozeduren unterstützt, die bei einer fixen Spaltenstruktur dieselbe Anzahl an Datensatzstrukturen zurückgeben.
•Verwenden Sie, wo immer dies möglich ist, die neueste Version des nativen vom Datenbankanbieter zur Verfügung gestellten Treibers. Verwenden Sie nach Möglichkeit keine Brückentreiber wie die ODBC zu ADO Bridge oder ODBC zu JDBC Bridge.
•Sie können Datenbanktransaktionen optional für gespeicherte Prozeduren, die als Datenzielkomponente aufgerufen werden, aktivieren, siehe Gespeicherte Prozeduren in Zielkomponeten. Für gespeicherte Prozeduren, die als Datenquelle (ohne Input-Parameter) oder solche, die wie eine Funktion aufgerufen werden (sowohl mit Input als auch Output), werden Transaktionen nicht unterstützt.
Die folgenden Tabelle enthält Anmerkungen zur Unterstützung der verschiedenen Datenbanken.
Datenbank | Anmerkungen zur Unterstützung |
---|---|
Access | •Gespeicherte Prozeduren haben in Microsoft Access-Datenbanken nur sehr eingeschränkte Funktionalitäten und werden in MapForce nicht unterstützt.
|
DB2 | •Unterstützt in MapForce: gespeicherte Prozeduren, Skalarfunktionen und Tabellenwertfunktionen. •Die Rückgabewerte aus gespeicherten D2-Prozeduren werden nicht unterstützt, da sie über die in MapForce verwendeten Datenbank-APIs nicht gelesen werden können. •Zeilenwertfunktionen (RETURNS ROW) werden nicht unterstützt. •Es wird empfohlen, zumindest das "IBM_DB2 9.7 Fix Pack 3a" zu installieren, um beim Lesen von Fehlermeldungen/Warnungen nach der Ausführung ein bekanntes Problem mit dem JDBC-Treiber zu vermeiden. Dadurch wird auch ein ADO-Problem behoben, das eine fehlende Ergebniszeile verursacht.
|
Firebird | •Wird in MapForce unterstützt: gespeicherte Prozeduren, Tabellenwertfunktionen
|
Informix | •Wird in MapForce unterstützt: gespeicherte Prozeduren, Tabellenwertfunktionen
|
MariaDB | •Wird in MapForce unterstützt: gespeicherte Prozeduren, Skalarfunktionen
|
MySQL | •Wird in MapForce unterstützt: gespeicherte Prozeduren, Skalarfunktionen. •MySQL bietet ab Version 5.5 vollständige Unterstützung für gespeicherte Prozeduren und Funktionen. Bei Verwendung einer früheren Version sind die MapForce-Funktionen eingeschränkt.
|
Oracle | •Unterstützt in MapForce: gespeicherte Prozeduren, Skalarfunktionen und Tabellenwertfunktionen. Dazu gehören auch allein stehende gespeicherte Prozeduren sowie innerhalb eines Oracle-Pakets definierte gespeicherte Prozeduren. •Es wird empfohlen, anstelle des Microsoft OLE DB Providers für Oracle einen nativen Oracle-Treiber zu verwenden. •Oracle hat eine eigene Methode, um Ergebnisse über Output-Parameter vom Typ REF CURSOR an den Client zurückzugeben. Dies wird von MapForce für gespeicherte Prozeduren unterstützt, nicht aber für Funktionen. Die Namen und die Anzahl der Datensatzstrukturen sind daher für gespeicherte Oracle-Prozeduren immer festgelegt.
|
PostgreSQL | •Unterstützt in MapForce: Skalarfunktionen, Zeilenwertfunktionen, Tabellenwertfunktionen. •In PostgreSQL beschreibt jeder beliebige in einer Funktion definierte Output-Parameter die Spalten der Ergebnisdatensätze. Diese Funktion wird automatisch von MapForce verwendet - die Datensätze müssen nicht durch die Ausführung oder die manuelle Eingabe von Datensatzstrukturen ermittelt werden. Parameter vom Typ refcursor werden nicht unterstützt.
|
Progress OpenEdge | •In MapForce unterstützt: Gespeicherte Prozeduren.
|
SQL Server | •Unterstützt in MapForce: gespeicherte Prozeduren, Skalarfunktionen und Tabellenwertfunktionen. •Informationen zu verfügbaren ADO-Anbietern finden Sie unter ADO-Verbindung. •Die ADO API bietet nur eingeschränkte Unterstützung für einige in SQL Server 2008 hinzugekommenen Datentypen (datetime2, datetimeoffset). Wenn es mit den neuen temporären Typen bei der Verwendung von ADO mit dem nativen SQL Server Client zu Datenkürzungen kommt, können Sie das Connection String-Argument DataTypeCompatibility=80 setzen oder ODBC verwenden. •SQL Server-Prozeduren haben einen impliziten Rückgabeparameter vom Typ int null, der für das Mapping zur Verfügung steht. Wenn in der Prozedur eine RETURN-Anweisung weggelassen wird, ist der Ergebniswert 0.
|
SQLite | •In SQLite werden gespeicherte Prozeduren nicht verwendet.
|
Teradata | •In MapForce unterstützt: gespeicherte Prozeduren, Makros. •Skalarfunktionen, Aggregatfunktion und Tabellenfunktionen werden nicht unterstützt. •Bekanntes Problem: Output-Parameterwerte werden nach dem Aufruf einer Prozedur vom Teradata ODBC-Treiber nicht befüllt.
|