Я создал тестовый пакет, содержащий единственную функцию, которая не принимает входных параметров и возвращает BOOLEAN. Тело функции состоит из одного заявления RETURN TRUE
для упрощения этого вопроса.Как я могу вызвать хранимую функцию Oracle, возвращающую значение BOOLEAN?
В VB.Net, я успешно вызываю функцию, однако, я всегда получаю исключение PLS-00382: expression is of wrong type
. В моем коде vb я создаю параметр и задаю его направление ReturnValue
и его DbType
- Int16
, чтобы сохранить логический результат (поскольку в структуре DbType
нет родного булева типа). Это не сработало, поэтому я попробовал 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()
И какой поставщик данных вы используете? –