【问题标题】:Unable to get boolean value from oracle stored procedure无法从 oracle 存储过程中获取布尔值
【发布时间】:2019-06-23 10:41:43
【问题描述】:

我一直在尝试找出如何从 oracle 存储过程中获取返回值作为布尔值。

我创建了一个简单的 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。

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

【问题讨论】:

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


【解决方案1】:

OracleDbType 似乎不支持布尔值。

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

【讨论】:

  • 我相信这是可能的原因,但无法得出确凿的结果,因为它确实具有布尔值作为枚举,并且它也接受作为输入。唯一的问题是out。
  • 我假设输入没有像输出一样接受,因为错误发生在 pi_bool_in 所在的第 1 行。我不知道为什么布尔值作为枚举存在,但 Oracle 没有在 ODP 手册中记录它。所以,它可能只在内部使用:)
  • 最后我放弃了 boolean 作为 out 参数。我找不到。我在存储过程之上编写了一个包装语句,它将返回十进制值而不是布尔值。并以某种方式让我的工作动起来。
猜你喜欢
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 2013-04-22
  • 2019-05-05
  • 1970-01-01
  • 2012-03-06
  • 2017-01-01
  • 2013-08-09
相关资源
最近更新 更多