c# - Dapper OracleMappingType.RefCursor 方向:ParameterDirection.Input 不起作用
问题描述
在我的 C# 中,我有一个对象列表,其中包含要插入到我的 Oracle 数据库中的表中的值,我正在使用 foreach 滚动列表并将记录逐个发送到 pck 中的函数,在那里我进行插入. 我正在使用 dapper 来做到这一点。但问题是当记录太多时,时间太长。Ex 35000 刀片。我想知道我是否可以将整个列表发送到银行,然后我可以一次完成所有插入。我考虑过使用 an 的可能性,OracleMappingType.RefCursor direction: ParameterDirection.Input
但 RefCursor 不适用于仅用于输出的输入类型。有谁知道如何告诉我一种将整个列表传递给数据库的方法,我可以在那里进行插入?
下面的方法是我今天使用的表格,但是当我有一个非常大的数据列表时,它需要很长时间。
string query = "PCK_TEST.FC_IMPORT_VALUES";
foreach (var item in ListOfValues)
{
var param = new OracleDynamicParameters();
param.Add("P_VALUE_A", dbType: OracleMappingType.Varchar2, direction: ParameterDirection.Input, value: item.ValueA);
param.Add("P_VALUE_B", dbType: OracleMappingType.Date, direction: ParameterDirection.Input, value: item.ValueB);
param.Add("P_VALUE_C", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueC);
param.Add("P_VALUE_D", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueD);
param.Add("P_VALUE_E", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueE);
param.Add("P_VALUE_F", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueF);
param.Add("P_VALUE_G", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueG);
param.Add("P_VALUE_H", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueH);
param.Add("P_VALUE_I", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueI);
param.Add("P_VALUE_J", dbType: OracleMappingType.Varchar2, direction: ParameterDirection.Input, value: item.ValueJ);
param.Add("P_VALUE_K", dbType: OracleMappingType.Decimal, direction: ParameterDirection.Input, value: item.ValueK);
param.Add("P_VALUE_L", dbType: OracleMappingType.Varchar2, direction: ParameterDirection.Input, value: item.ValueL);
param.Add("P_RETORN", dbType: OracleMappingType.Varchar2, size: 4000, direction: ParameterDirection.ReturnValue);
await SqlMapper.ExecuteAsync(_con, query, param: param, commandType: CommandType.StoredProcedure);
var erro = param.Get<string>("P_RETORN");
}
解决方案
以下解决方案对我有用:Oracle 批量数据插入
推荐阅读
- c# - 无法让 UDP.BeginReceive 在 WPF 中工作
- java - 使用 RestTemplate 序列化 JSON 数据的问题
- c++ - c++ 并发线程中的类对象
- css - flex-end和end之间的区别?
- html - 将 TD 与 TH 同步
- node.js - 关于 node js 中使用 node-postgres 和渲染页面的回调的问题
- python - 使用 pandas 到 Datetime 的字符串:TypeError:
不能转换为日期时间 - excel - vba将带有工作簿名称和文本的excel工作表保存为PDF
- jquery - 如何清理地图上的 Mapbox-gl 数据
- sql - 如何修复 PL/SQL:ORA-00918:Oracle 中定义不明确的列