Как вызвать функцию с возвращаемым номером

Прости мое отсутствие знаний. Я пытаюсь вызвать функцию вставки из sqlnavigator, Я могу захватить prm1.Value, но я не уверен, как я должен включать RETURN NUMBER (см. SQL ниже) из моей спецификации пакета в sqlnavigator. Когда я запускаю его, ничего не добавляется в 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;

2 ответа

Решение

Вы создаете команду, но не открываете соединение или не выполняете команду.
Вы также создаете параметр, но не добавляете его в команду.
Вам также понадобится еще один параметр с ParameterDirection.Return если вы хотите захватить возвращаемое значение. Вы не можете проверить значение этого параметра, пока читатель не будет закрыт.

Вот документы.

Вот как я исправил свой код VB.net для правильной связи с Oracle/sqlnavigator.

Спасибо @ Скотт Ханнен

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
Другие вопросы по тегам