Я пытаюсь выполнить хранимую процедуру Oracle из макроса VBA и получаю эту ошибку:
Watch : : giCurPlanId : 24306945 : Long : DataAccessFns.exec_oracle_procedure
Watch : : adocmd.Execute : ‹ORA-06550: строка 1, столбец 42:
PLS-00201: идентификатор 'PO_RETURN_CURSOR' должен быть объявлен
это код
dim ReturnCursor As ADODB.Recordset
Set adocmd = New ADODB.Command
strSQL = "{call " & "GET_TEST_DATA" & "( ?, ?, ?, {resultset 0, po_return_cursor})}"
adocmd.CommandType = adCmdText
adocmd.CommandText = strSQL
adocmd.Parameters.Append _
adocmd.CreateParameter("pi_PlanId", adInteger, adParamInput)
adocmd.Parameters(0).Value = giCurPlanId
adocmd.Parameters.Append _
adocmd.CreateParameter("pi_PyPlanId", adInteger, adParamInput)
adocmd.Parameters(1).Value = -1
adocmd.Parameters.Append _
adocmd.CreateParameter("po_return_code", adInteger, adParamOutput, 6)
adocmd.Parameters(2).Value = 99
'Execute the proc. Proc must return cursor or will error?
adocmd.Prepared = True
Set ReturnCursor = adocmd.Execute
Это код хранимой процедуры Oracle:
PROCEDURE GET_TEST_DATA(
pi_PlanId IN NUMBER DEFAULT NULL,
pi_PyPlanId IN NUMBER DEFAULT NULL,
po_return_code OUT INTEGER,
po_return_cursor IN OUT t_return_cursor)
AS
v_PlanId NUMBER(10,0);
v_PyPlanId NUMBER(10,0);
e_sqlerror EXCEPTION;
v_return_code INTEGER;
v_nContinue NUMBER(10,0);
v_sSsaPlanId VARCHAR2(3);
v_nSizeofId NUMBER(10,0);