Возврат выходного параметра из хранимой процедуры Oracle - PullRequest
0 голосов
/ 01 октября 2018

У меня проблема с моей хранимой процедурой в Oracle.Мне нужно вызвать мою процедуру и вернуть значение (выходной параметр).

Моя процедура выглядит следующим образом:

create or replace PROCEDURE NumeratorGetNewId (
    p_NumeratorId number,
    p_Save number,
    Return_Value OUT number)

    IS
    v_NewId number;
    v_CurrentNumerator number;
    v_NumeratorValue number;
    v_NumeratorIncrement number;

    BEGIN
    SELECT "Id" Into v_CurrentNumerator FROM Numerator WHERE "Id" = p_NumeratorId;
    SELECT "Value" Into v_NumeratorValue FROM Numerator WHERE "Id" = v_CurrentNumerator;
    SELECT "Increment" Into v_NumeratorIncrement FROM Numerator WHERE "Id" = v_CurrentNumerator;
    Return_Value := v_NumeratorValue + v_NumeratorIncrement;

    IF (p_Save = 1)
    THEN
    UPDATE Numerator SET "Value" = Return_Value WHERE "Id" = v_CurrentNumerator;
    END IF;

    END NumeratorGetNewId;

Моя таблица: enter image description here

Далее я попытаюсь вызвать мою процедуру:

declare
resulto number;
begin
NUMERATORGETNEWID(:NumeratorId,:Save, resulto);
end;

Но с каждым проходом я получаю значение 0. С каждым новым проходом я должен получать значение, увеличенное на единицу.Но я всегда получаю значение 0.

Спасибо за помощь!

В моем приложении есть класс менеджера =>

                var numeratorNewId = Session.GetNamedQuery("ExecNumeratorGetNewId")
                    .SetParameter("NumeratorId", numerator.Id)
                    .SetParameter("Save", save)

=> после попытки позвонитьмоя процедура

declare
resulto number;
begin
NUMERATORGETNEWID(:NumeratorId,:Save, resulto);
end;

После каждого вызова Session.GetNamedQuery ("ExecNumeratorGetNewId") мне нужно получить новое значение "Value" в моей таблице базы данных и вернуть его.

Если базовое значение равно 0,после первого вызова мне нужно получить значение = 1, второй вызов значение = 2 и третье значение = 3, но во всех случаях я получаю значение = 0.

Мой файл сопоставлений выглядит так:

<procedure name ="NumeratorGetNewId">
  <mappings>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
      <resultset name="NumeratorResult">
        <return-scalar column="resulto" type="System.Int64"/>
      </resultset>
      <sql-query name="ExecNumeratorGetNewId">
        <query-param name="NumeratorId" type="long" />
        <query-param name="Save" type="System.Boolean" />
        declare
        resulto number;
        begin
        NUMERATORGETNEWID(:NumeratorId, :Save, resulto);
        end;
      </sql-query>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...