我正在尝试将整数数组传递给Oracle存储过程。
遵循Oracle中定义的类型。
CREATE OR REPLACE TYPE EMPIDLIST
AS TABLE OF Number;
以下是使用上述类型的存储过程。
CREATE OR REPLACE PROCEDURE TESTINPUTARRAY
(
IN_STR_ARRAY IN EMPIDLIST
) AS
BEGIN
--Doing something here.....
NULL;
END TESTINPUTARRAY;
以下是使用Dapper ORM从.net应用程序调用存储过程的代码。
List<int> values = new List<int>() { 1, 2, 3, 4, 5 };
OracleParameter parameters = new OracleParameter
{
ParameterName = "IN_STR_ARRAY",
OracleDbType = OracleDbType.Int32,
Value = values.ToArray(),
Direction = System.Data.ParameterDirection.Input
};
await connection.ExecuteAsync("TESTINPUTARRAY", param: parameters, commandType: CommandType.StoredProcedure);
当调用上述ExecuteAync方法时,我收到以下错误 -
无法转换类型为#System; Int32 []&#39;的对象输入&#39; System.IConvertible
我在网上搜索了这个问题,但找不到任何解决方案。
答案 0 :(得分:1)
我之前回答过一个related question(你应该仔细检查一下,它应该是你的指南.net-ora dev),这就是你需要的:
OracleParameter parameters = new OracleParameter
{
ParameterName = "IN_STR_ARRAY",
OracleDbType = OracleDbType.Int32,
// -- ADD THESE LINES:
CollectionType = OracleCollectionType.PLSQLAssociativeArray,
Size = 100, // Declare more than you expect
// --
Value = values.ToArray(),
Direction = System.Data.ParameterDirection.Input
};