2

原谅我缺乏知识。我正在尝试从sqlnavigator. 我能够捕获prm1.Value,但我不确定我应该如何RETURN NUMBER在 sqlnavigator 中从我的包规范中包含(参见下面的 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;
4

2 回答 2

1

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

这是文档

于 2016-07-14T02:15:02.390 回答
0

这就是我纠正我的 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
于 2016-07-14T18:36:11.597 回答