Я пытаюсь использовать Access/VBA для извлечения набора результатов из моей хранимой процедуры Oracle, используя объект ADO Command.Идентификатор Oracle ORA-06550 должен быть объявлен при вызове из ADO Command Object
Я продолжаю получать сообщение об ошибке:
[Oracle][ODBC][Ora]ORA-06550: line 1, column 19:
PLS-00201: identifier 'RETURNDATA' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Я прочитал несколько статей в интернете о том, как его сделали - и пробовал разные способы сделать это (то есть с помощью выполнения вместо команды. объект), но я просто не могу заставить его работать.
У Microsoft была хорошая статья базы знаний о том, как это сделать, но, несмотря на то, что они следуют их примеру, я не могу заставить ее работать. http://support.microsoft.com/kb/176086
Когда я Run PL/SQL в Oracle SQL Developer, возвращаемое значение указано в выходных переменных окна. Это говорит мне, что и хранимая процедура работает, и необходимые разрешения были предоставлены.
Oracle Версия:
SELECT * FROM v $ версии
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
PL/SQL Release 9.2.0.8.0 - Production
"CORE 9.2.0.8.0 Production"
TNS for 32-bit Windows: Version 9.2.0.8.0 - Production
NLSRTL Version 9.2.0.8.0 - Production
Oracle Определение пакета:
CREATE OR REPLACE
PACKAGE test AUTHID DEFINER AS
PROCEDURE testSP (returnData OUT NUMBER);
END test;
/
CREATE OR REPLACE
PACKAGE BODY test AS
PROCEDURE testSP (returnData OUT NUMBER) IS
BEGIN
returnData := 7;
END;
END test;
MS Access VBA Code
Public Sub testSP()
Dim oraConn As ADODB.Connection
Dim oraCmd As ADODB.Command
Dim oraRetSet As ADODB.Recordset
Dim oraNum As Integer
Set oraConn = New ADODB.Connection
' Discovered I need to set this to Read/Write or the SP cannot do any INSERT operations
oraConn.Mode = adModeReadWrite
' Connect to the Oracle Server
oraConn.Open "Driver={Oracle in OraHome102};dbq=oradsn;Uid=username;Pwd=password"
' Set up our Command.
Set oraCmd = New ADODB.Command
Set oraCmd.ActiveConnection = oraConn
oraCmd.CommandType = adCmdText
oraCmd.Parameters.Append oraCmd.CreateParameter("returnData", adNumeric, adParamOutput)
oraCmd.CommandText = "{CALL test.testSP({resultset 1, returnData})}"
' Set up our Recordset
Set oraRetSet = New ADODB.Recordset
oraRetSet.CursorType = adOpenStatic
' Attach our Recordset to our Command
Set oraRetSet.Source = oraCmd
' Open our Recordset
oraRetSet.Open
' Retreive our Stored Procedure Result
oraNum = oraRetSet.Fields(0).Value
' Display Result to user
Debug.Print ">>> Return Value: " & oraNum
' Close the Recordset & Connection Objects
oraRetSet.Close
oraConn.Close
' Clean Up
Set oraConn = Nothing
Set oraCmd = Nothing
Set oraRetSet = Nothing
End Sub
Я действительно рисую пробелы - что значит его, вероятно, что-то маленькое, что я пропустил. Любая помощь будет оценена по достоинству.
Обновление от 29 августа Я не достиг прогресса. Я пытался перейти от ODBC к OLEDB Provider, после другой StackOverflow вопрос/ответ, как руководство:
How do I call an Oracle stored procedure from an Excel VBA script?
' Connect to the Oracle Server
oraConn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=oradsn;" & _
"User ID=username;Password=password;"
oraConn.Open
Set oraCmd = New ADODB.Command
Set oraCmd.ActiveConnection = oraConn
oraCmd.Parameters.Append oraCmd.CreateParameter("returnData", adSmallInt, adParamOutput)
oraCmd.Properties("PLSQLRSet") = True
oraCmd.CommandText = "{CALL test.testSP(?)}"
Set oraRetSet = oraCmd.Execute
oraCmd.Properties("PLSQLRSet") = False
oraNum = oraRetSet.Fields(0).Value
Это избавляется от необъявленной идентификатора, но он не возвращает записей .. oraRetSet.Fields.Count равна 0