我正在使用 ADO.Net 调用 Oracle 数据库中的存储过程。存储过程有一个输出参数是 NVARCHAR2。这是存储过程:
CREATE OR replace PROCEDURE VALIDATE_Bin (
machine_dump_name IN NVARCHAR2,
lpn IN NVARCHAR2,
result OUT NUMBER,
message OUT NVARCHAR2)
IS
BEGIN
IF lpn LIKE 'A%' THEN
result := 1;
message := NULL;
ELSE
IF lpn IS NULL THEN
result := 0;
message := 'Failed Read';
ELSE
result := 0;
message := 'Invalid Barcode';
END IF;
END IF;
END;
这里是填写命令参数的c#代码:
command.Parameters.Add(new OracleParameter("machine_dumper_name",OracleType.NVarChar){Value = "My Dumper"});
command.Parameters.Add(new OracleParameter("lpn", OracleType.NVarChar) { Value ="XYZ1234"});
var resultParam = new OracleParameter("result", OracleType.Number) { Direction = ParameterDirection.Output};
command.Parameters.Add(resultParam);
var messageParam = new OracleParameter("message", OracleType.NVarChar) { Direction = ParameterDirection.Output};
command.Parameters.Add(messageParam);
command.ExecuteNonQuery();
如果我像这样执行它,我会得到异常:
System.Exception:参数“消息”:没有为可变长度数据类型设置大小:字符串。
我想不用担心。Oracle 期望“消息”参数上的字符串长度。所以我在“消息”参数上添加了一个大小参数:
var messageParam = new OracleParameter("message", OracleType.NVarChar, 255) { Direction = ParameterDirection.Output};
然后当我运行它时,我得到了这个 System.Data.OracleClient.OracleException:
PLS-00306:调用“VALIDATE_Bin”时参数的数量或类型错误
我到底应该怎么调用这个程序并把消息传出去?我认为这个问题是特定于字符串数据类型的。这是一个错误吗?还是我做错了什么?