我在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,则在第一次调用后,我需要获取Value = 1,第二次调用时,我需要获取Value = 3,但在所有情况下,我都需要获取Value = 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>