2009-06-12 5 views
1

Est-il possible de renvoyer un curseur Oracle Ref Cursor à un appelant situé dans SqlServer T-SQL? Lorsqu'il s'agit d'un programme .Net normal, il existe cet article de la base de connaissances: http://support.microsoft.com/kb/322160Renvoyer un curseur Oracle Ref à un appelant SqlServer T-SQL

Mais est-ce le même type de chose que T-SQL?

+0

que voulez-vous dire par « un appelant qui est en T-SQL »? Voulez-vous dire un travail ou un processus SQL Server appelant Oracle via un serveur lié? – RBarryYoung

+0

Appelé à partir d'une procédure stockée dans SqlServer –

Répondre

1

Je crois que c'est ce que vous ar la recherche de http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/fcdaa97e-8415-4c3e-8ffd-1ad45b590d57/ (de là):

Nous pouvons utiliser Script Component pour exécuter des procédures stockées Oracle avec le curseur ref comme paramètre (s)

Ajouter la sortie colonnes au composant.

Par exemple: j'ai eu Get_Employees.GetEmployees de paquets oracle qui prend un paramètre put mettre le type ref curseur

I ajouté 2 telles colonnes EmpID et EmpName puis override CreateNewOutputRows() comme

Public Overrides Sub CreateNewOutputRows() 

Try 

Dim dr As OracleDataReader = oracleCmd.ExecuteReader() 

While dr.Read 

Output0Buffer.AddRow() 

Output0Buffer.EmpID = CDec(dr(0).ToString) 

Output0Buffer.EmpName = dr(1).ToString 

End While 

Catch ex As Exception 

Me.ComponentMetaData.FireError(-1, "InitExtract", ex.Message, String.Empty, 0, True) 

End Try 

Output0Buffer.SetEndOfRowset() 

End Sub 

Avant que nous devons définir l'objet de commande oracle sous-programme PreExecute comme:

Dim plsql As String = "BEGIN Get_Employees.GetEmployees(:curEmployeesbyID);END;" 

oracleCmd = New OracleCommand(plsql, oracleConn) 

With oracleCmd 

.CommandType = CommandType.Text 

.Parameters.Add(":curEmployeesbyID", OracleType.Cursor).Direction = ParameterDirection.Output 

End With 
Questions connexes