如何使用 RETURN NUMBER 调用函数

How to call a Function with a RETURN NUMBER

原谅我的知识匮乏。我正在尝试从 sqlnavigator 调用插入函数。我能够捕获 prm1.Value,但我不确定我应该如何从我的 sqlnavigator 包规范中包含 RETURN NUMBER(请参阅下面的 SQL)。当我 运行 它时,没有任何东西被添加到 ORACLE 中。

 Public Shared Function INSERT_CATEGORY()

    Dim cmdOraCommand As New OracleCommand

    Try
        cmdOraCommand.CommandType = CommandType.StoredProcedure
        cmdOraCommand.CommandText = "SF_ALEX_TEST.insertCategory"

        Dim prm1 As OracleParameter = cmdOraCommand.Parameters.Add( _ 
            "inCategory", OracleType.VarChar)
        prm1.Direction = ParameterDirection.Input
        prm1.Value = strCategory

    Catch ex As Exception
        MsgBox(ex.Message)

    Finally
        cmdOraCommand.Dispose()
    End Try

End Function

SQL/ORACLE

FUNCTION insertCategory(inCategory IN VARCHAR2) RETURN NUMBER

IS
    vReturnedValue NUMBER;
    vID NUMBER;
    vExist NUMBER;
BEGIN
    IF inCategory IS NULL THEN

        vReturnedValue := 0;
        RETURN vReturnedValue;
    ELSE

        BEGIN
            SELECT COUNT(MNT_CATEGORY) INTO vExist
            FROM MNT_CATEGORIES
            WHERE MNT_CATEGORIES.MNT_CATEGORY = upper(inCategory);
        END;

        IF vExist = 0 THEN
            BEGIN
                SELECT SEQ_MNT_LOG.NEXTVAL INTO vID FROM DUAL;

                INSERT INTO MNT_CATEGORIES(MNT_CATEGORY_ID, MNT_CATEGORY)
                VALUES (vID, UPPER(inCategory));
                COMMIT;

                vReturnedValue := vID;
                RETURN vReturnedValue;

                EXCEPTION
                WHEN OTHERS THEN
                    vReturnedValue := SQLCODE;
                    RETURN vReturnedValue;
            END;

        ELSE

            vReturnedValue := vExist * -1;
            RETURN vReturnedValue;
        END IF;
    END IF;
END;

您正在创建命令,但没有打开连接或执行命令。
您还创建了一个参数,但没有将其添加到命令中。
如果您想捕获 return 值,您还需要另一个带有 ParameterDirection.Return 的参数。在 reader 关闭之前,您无法检查该参数的值。

Here are the docs

这就是我如何更正我的 VB.net 代码以正确地与 Oracle/sqlnavigator 通信。

感谢@Scott Hannen

Public Shared Function INSERT_CATEGORY() As Boolean

    Dim cmdMntID As New OracleCommand
    cmdMntID.CommandType = CommandType.StoredProcedure
    cmdMntID.CommandText = "SF_ALEX_TEST.insertCategory"

    Dim prm1 As OracleParameter = cmdMntID.Parameters.Add("inCategory", OracleType.VarChar)
    prm1.Direction = ParameterDirection.Input
    prm1.Value = strCategory

    cmdMntID.Parameters.Add("vID", OracleType.Number).Direction = ParameterDirection.ReturnValue

    cmdMntID.Connection = ORA_CON

    cmdMntID.ExecuteNonQuery()

    vID = cmdMntID.Parameters("vID").Value

    If cmdMntID.Parameters("vID").Value > 1 Then
        Return True
    Else
        Return False
    End If

End Function