gpt4 book ai didi

oracle - 从 ADO.NET 调用存储过程时,不能将类型为 NVarChar 的 OracleParameter 与输出的 ParameterDirection 一起使用

转载 作者:行者123 更新时间:2023-12-01 05:32:57 24 4
gpt4 key购买 nike

我正在使用 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: Parameter 'message': No size set for variable length data type: String.



我想不用担心。 Oracle 需要“消息”参数上的字符串长度。所以我在“消息”参数上添加了一个大小参数:
var messageParam = new OracleParameter("message", OracleType.NVarChar, 255) { Direction = ParameterDirection.Output};

然后当我运行它时,我得到这个 System.Data.OracleClient.OracleException:

PLS-00306: wrong number or types of arguments in call to 'VALIDATE_Bin'



我到底该怎么调用这个程序并把消息发出来?我认为这个问题特定于字符串数据类型。这是一个错误吗?还是我做错了什么?

最佳答案

尝试

var messageParam = new OracleParameter("message", OracleDbType.NVarchar2,UInt16.MaxValue) { Direction = ParameterDirection.Output};
messageParam.Value = DbNull.Value

关于oracle - 从 ADO.NET 调用存储过程时,不能将类型为 NVarChar 的 OracleParameter 与输出的 ParameterDirection 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10393902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com