Извлечение выходных параметров из хранимой процедуры с использованием ссылки Eclipse - PullRequest
0 голосов
/ 12 апреля 2019

Я вызываю хранимую процедуру из JPA EclipseLink. Хранимая процедура возвращает три выходные переменные: один тип курсора и два других типа. Я могу получить значение, возвращаемое курсором, но не два других значения.

Вот часть хранимой процедуры (пример):

create or replace PROCEDURE PROCEDURE1 (
Variable1               IN VARCHAR2,
Variable12          IN VARCHAR2,
Variable13                      IN VARCHAR2,
Variable14                  IN VARCHAR2,
p_xml_result                OUT SYS_REFCURSOR,
p_errorcode             OUT NUMBER,
p_errorMessage      OUT VARCHAR2)
    IS
        -- Declare variable
        ERRSQL                         VARCHAR2 (80);
        NOSTRAECCEZIONE    EXCEPTION;
        ERROR_ONE                 EXCEPTION;
        V_AREA                        VARCHAR2(40);

    BEGIN
SELECT AREA
              INTO V_AREA
              FROM Employee
             WHERE     Employee_CODE = P_EmployeeCode;

              OPEN p_xml_result FOR
              <Some query to get data>
              p_errorcode := 0;
                p_errorMessage := NULL;

EXCEPTION
        WHEN NO_DATA_FOUND THEN
                p_errorcode := 100;
            p_errorMessage := 'generic error';

        WHEN OTHERS THEN
            p_errorcode := 102;
            p_errorMessage := SQLERRM;

Java-код:

StoredProcedureCall procCall = new StoredProcedureCall();
procCall.setProcedureName("getSpecialOffers");
procCall.addNamedArgument("Variable1","Variable1",String.class);
procCall.addNamedArgument("Variable2", "Variable12", String.class);
procCall.addNamedArgument("Variable13", "Variable13", String.class);

procCall.addNamedArgument("Variable14", "Variable14", String.class);
procCall.addNamedOutputArgument("p_xml_result", "p_xml_result", OracleTypes.CURSOR);
procCall.addNamedOutputArgument("p_errorcode", "p_errorcode", Integer.class);
procCall.addNamedOutputArgument("p_errorMessage", "p_errorMessage", String.class);

Session session = ((JpaEntityManager)_em).getActiveSession();
ValueReadQuery query = new ValueReadQuery();
query.setCall(procCall);
query.addArgument("Variable1");
query.addArgument("Variable12");
query.addArgument("Variable13");
query.addArgument("Variable14");

Vector parameters = new Vector();
parameters.addElement(Variable1);
parameters.addElement(Variable12);
parameters.addElement(Variable13);
parameters.addElement(Variable14);


Object qResult = null;

qResult = session.executeQuery(query,parameters);
Vector vec=(Vector) qResult;
ArrayRecord arrayrec =(ArrayRecord) vec.get(0);

p_xml_result возвращает четыре поля, которые я могу получить как arrayrec.get ("VariableXYZ"). и arrayrec также имеет только те четыре переменные, которые возвращаются из курсора. Но я хочу получить доступ к значению p_errorcode в моем коде во всех условиях. Не могли бы вы помочь мне с этим?

1 Ответ

0 голосов
/ 16 апреля 2019

Я получил желаемые выходные параметры, изменив ValueReadQuery на DataReadQuery.

...