Overblog Folge diesem Blog
Edit post Administration Create my blog
Blog von Olaf Helper

SSIS OleDB Befehl mit Oracle Datenbank als Ziel

26. August 2011 , Geschrieben von Olaf Helper Veröffentlicht in #MSSQL

Wenn man in einem SQL Server Integration Services Package mit einem parametrisiertem SQL Statement in einem OleDB Befehl gegen eine Oracle Datenbank arbeiten will, erhält man diese Fehlermeldung:

 

Fehler bei Datenflusstask [OLE DB-Befehl 1 [195]]: SSIS-Fehlercode 'DTS_E_OLEDBERROR'. OLE DB-Fehler. Fehlercode: 0x80040E51.

Ein OLE DB-Datensatz ist verfügbar. Quelle: 'OraOLEDB' HRESULT: 0x80040E51 Beschreibung: 'Der Provider kann keine Parameterinformationen ermitteln und SetParameterInfo ist nicht aufgerufen worden.'.

Fehler bei Datenflusstask [OLE DB-Befehl 1 [195]]: Zielspaltenbeschreibungen können nicht aus den Parametern des SQL-Befehls abgerufen werden.

 

Den Grund nennt die Fehlermeldung, der Oracle Treiber ist (trotz aktuellem Stand 11g) nicht in der Lage Metadaten für die verwendeten Parameter zurück zu liefern, also Informationen wie Datentyp etc.

Andere Provider können das hingegen problemlos.

Das ist nicht gerade schön, aber auch kein Beinbruch, man muss dann halt die Parameter selbst definieren und die Zuordnung manuell vornehmen.

Nehmen wir mal an, man will Daten in einer Oracle Tabelle aktualisieren, sei es über einen einfachen selbst definiert OleDB Befehl oder mit Einem, der aus dem Wizard der Transformation „Langsam veränderliche Dimension“ (SCD = Slowly Changing Dimension“) erzeugt wurde. Das parametrisierte Statement sieht dann im Prinzip so aus:

 

 UPDATE "Schema"."Tabelle"
SET "Feld1" = ?
,"Feld2" = ?
,"Feld3" = ?
,"Feld4" = ?
WHERE "PK" = ?

 

Wie allgemein bei OleDB Befehlen sind die Parameter nicht benannt, sondern es sind welche mit dem Fragezeichen Platzhalter und dadurch ist bei der späteren Zuordnung die Reihenfolge der Parameter wichtig.

Als erstes definiert man in den Eigenschaften des „OleDB-Befehl“ unter dem Kartenreiter „Eingabe- und Ausgabeeigenschaften“ die einzelnen Parameter mit dem jeweiligen Datentyp und dabei ist, wie zuvor erwähnt, die Reihenfolge wichtig. Das heißt für das Beispiel-Statement von oben, das erst die Felder „Feld1“ bis „Feld4“ definiert und zum Schluss der PK Parameter, da der „? Parameter“ im SQL Statement auch zuletzt kommt.

Ebenso wichtig ist natürlich, das man die Datentypen richtig definiert, sonst gibt es später bei der Überprüfung bzw. beim Ausführen mindestens Warnungen, wenn nicht gar Fehler.

 

SsisOra_InputOutputColumns.JPG

 

Dann ordnet man noch schnell unter dem Kartenordner „Spaltenzuordnung“ die Eingabespalten den Parametern zu und das war es schon; anschließend gibt es keine Fehlermeldung oder Warnungen beim Erstellen des Packages und der OleDB Befehl arbeitet wie gewünscht.

 

SsisOra_ColumnRelation.JPG  

 

Einen Hinweis aber noch:
Wurde der OleDB Befehl vom Wizard der Transformation „Langsam veränderliche Dimension“ erstellt, dann diesen später nicht noch einmal aufrufen, denn der verwirft dann alle manuellen Änderungen und man darf wieder alles von vorne durchgehen.

Diesen Post teilen

Repost 0

Kommentiere diesen Post