ADO Command 개체를 사용하여 Access/VBA를 사용하여 Oracle 저장 프로 시저에서 결과 집합을 검색하려고합니다. . (즉 명령 대신 실행 사용하고 그 일을 다른 방법을 시도 - 나는 그것의 수행 방법에 대한 그물에 기사의 수를 읽은ADO Command Object에서 호출 할 때 Oracle ORA-06550 식별자를 선언해야합니다.
[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는이 작업을 수행하는 방법에 대한 지식 기반 문서를 잘 가지고 있지만 - 예를 따르지 만 작동하지 않을 수 있습니다. 나는 오라클 SQL Developer에서 실행 PL/SQL, 반환 값이 출력 변수에 창을 나열 http://support.microsoft.com/kb/176086
. 이것은 저장 프로 시저가 작동하고 필요한 권한이 부여되었음을 알려줍니다.
오라클 버전 :
SELECT * 브이 $ 버전에서
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
오라클 패키지 정의 :
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 액세스 VBA 코드
,536,913,632 10Public 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
저는 실제로 공백을 그리는 중입니다. 이는 필자가 놓친 작은 것이 었음을 의미합니다. 어떤 도움을 주시면 감사하겠습니다.
업데이트 Aug 29 나는 아무런 진전을 이루지 못했다. 나는 가이드로 또 다른 유래 질문/대답 다음, OLEDB 공급자에 ODBC 전환을 시도 :
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과 같습니다.