我创建了一个测试包,其中包含一个不接受输入参数并返回布尔值的函数。功能体由单个
RETURN TRUE
为了简化这个问题。
在VB.Net中,我成功地调用了该函数,但是,我总是遇到异常
PLS-00382: expression is of wrong type
.
在我的vb代码中,我创建一个参数并将其方向设置为
ReturnValue
及其
DbType
到
Int16
存储布尔结果(因为在
Db类型
结构)。那不管用,所以我试着
Double
然后
Decimal
然后
Long
和
Varchar2
但它们都引起了相同的异常。
我在这里做错了什么?
包装规格
CREATE OR REPLACE PACKAGE TEST_PKG AS
FUNCTION GET_TEST_VAL RETURN BOOLEAN;
END TEST_PKG;
,
包装主体
CREATE OR REPLACE PACKAGE BODY TEST_PKG AS
FUNCTION GET_TEST_VAL RETURN BOOLEAN IS
BEGIN
RETURN TRUE;
END GET_TEST_VAL;
END TEST_PKG;
,
vb.net代码
Dim con As New OracleConnection("Data Source=test_db;user id=scott;password=123456")
Dim cmd As OracleCommand = con.CreateCommand()
cmd.CommandText = "TEST_PKG.GET_TEST_VAL"
Dim ret_val As New OracleParameter
ret_val.Direction = ParameterDirection.ReturnValue
ret_val.DbType = OracleDbType.Int16 '//<-- I tried varchar2, decimal, long, double'
cmd.Parameters.Add(ret_val)
cmd.CommandType = CommandType.StoredProcedure
cmd.ExecuteNonQuery() '//<-- This raises an Exception (PLS-00382: expression is of wrong type)'
Console.WriteLine("Return Value = " & ret_val.Value.ToString)
con.Close()