VBA, выполняющий хранимую процедуру Oracle 19c с параметрами с использованием ADO, выдает ошибку

Я пытаюсь выполнить хранимую процедуру 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);

person user9963680    schedule 16.03.2021    source источник


Ответы (1)


Вы должны добавить параметр po_return_cursor, потому что он объявлен как IN OUT.

person artnib    schedule 16.03.2021
comment
как добавить? Я знаю, что использую клиент oracle.dataaccess, но не знаю, как использовать клиент adodb. - person user9963680; 16.03.2021