无法从oracle存储过程获取布尔值

时间:2019-01-30 07:56:15

标签: c# .net oracle stored-procedures parameters

我试图用几个小时来找出如何从oracle存储过程中获取布尔值的返回值。

我创建了一个简单的SP,该SP返回一个布尔值,但是当我将参数传递为OracleDbType.Boolean时,出现错误。

这是我的sp

create or replace procedure nbq_out_test (pi_bool_in IN BOOLEAN,
                                  pi_var_in  IN VARCHAR2,
                                  pi_num_in  IN NUMBER,
                                  po_bool_out OUT BOOLEAN,
                                  po_var_out  OUT VARCHAR2,
                                  po_num_out OUT NUMBER) AS
BEGIN
    po_bool_out := pi_bool_in ;
    po_var_out := pi_var_in;
    po_num_out := pi_num_in;

END   nbq_out_test;

这是我的C#代码

OracleCommand command = new OracleCommand("NBQ_OUT_TEST", con);
            OracleParameter param;
            command.BindByName = false;
            command.CommandType = CommandType.StoredProcedure;

param = new OracleParameter("PI_BOOL_IN", OracleDbType.Boolean, ParameterDirection.Input); //Works fine as input
            param.Value = true;
            command.Parameters.Add(param);

param = new OracleParameter("PO_BOOL_OUT",OracleDbType.Boolean,ParameterDirection.Output); //This is the line causing error.

            command.Parameters.Add(param);
command.ExecuteNonQuery();

这是错误

ORA-06502: PL/SQL: numeric or value error\nORA-06512: at line 1

我无法修改存储过程以返回10或类似的东西。

oracle版本为12.1.0.2.0

Oracle.ManagedDataAccess.18.3.0

我进行了很多搜索,但大多数建议是修改SP,但这种建议还没结束。

任何建议都会有很大帮助。

1 个答案:

答案 0 :(得分:1)

OracleDbType似乎不支持布尔值。

我认为您的问题已经在下面的页面中给出了答案。 Boolean in OracleDbType