【发布时间】: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
我无法修改存储过程以返回 1 或 0 或任何类似内容。
oracle版本是12.1.0.2.0
Oracle.ManagedDataAccess.18.3.0
我搜索了很多,但大多数建议是修改不在我末尾的 SP。
任何建议都会有很大帮助。
【问题讨论】:
-
Oracle 数据库没有布尔数据类型!
-
您是否尝试过将参数作为数字传递?
-
是的,它不允许除布尔以外的任何其他类型。
-
@preciousbetine Oracle SQL 不支持
BOOLEAN,但 Oracle PL/SQL 确实有BOOLEAN数据类型。
标签: c# .net oracle stored-procedures parameters