如何使用 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 关闭之前,您无法检查该参数的值。
这就是我如何更正我的 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
原谅我的知识匮乏。我正在尝试从 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 关闭之前,您无法检查该参数的值。
这就是我如何更正我的 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