У меня проблема с моей хранимой процедурой в 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;
Моя таблица:
Далее я попытаюсь вызвать мою процедуру:
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>