从Oracle存储过程返回输出参数

时间:2018-10-01 13:33:07

标签: oracle stored-procedures plsql nhibernate

我在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,则在第一次调用后,我需要获取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>

0 个答案:

没有答案