oracle - .net核心调用oracle函数将返回值放在第一个参数中
问题描述
.net 核心 3.1 nuget:Oracle.ManagedDataAccess.Core 2.19.91
甲骨文功能:
create or replace NONEDITIONABLE FUNCTION GET_TOTAL_SALES
(
PARAM1 IN VARCHAR2,
PARAM2 IN VARCHAR2
)
RETURN VARCHAR2 AS
BEGIN
RETURN 'abc';
END GET_TOTAL_SALES;
.net核心代码:
var cmdText = "GET_TOTAL_SALES";
using (var connection = new OracleConnection(connStr))
{
using (var command = new OracleCommand(cmdText, connection))
{
connection.Open();
command.CommandType = CommandType.StoredProcedure;
var param1 = new OracleParameter("PARAM1", OracleDbType.Varchar2);
param1.Direction = ParameterDirection.Input;
param1.Value = "param1Value";
command.Parameters.Add(param1);
var param2 = new OracleParameter("PARAM2", OracleDbType.Varchar2);
param2.Direction = ParameterDirection.Input;
param2.Value = "param2Value";
command.Parameters.Add(param2);
var returnValue = new OracleParameter("returnValue", OracleDbType.Varchar2);
returnValue.Direction = ParameterDirection.ReturnValue;
command.Parameters.Add(returnValue);
command.ExecuteNonQuery();
Console.WriteLine(returnValue.Value); //""
Console.WriteLine(param1.Value); //"abc"
}
}
结果是返回值被放入第一个参数(param1)而不是returnValue。为什么?帮助!
解决方案
我问 Oracle 并得到答复:“这是预期的行为。为函数绑定的第一个参数必须是返回值。来自文档: https ://docs.oracle.com/en/database/oracle/oracle-data -access-components/19.3.2/odpnt/featOraCommand.html
我知道,这很疯狂。我们还可以按名称使用绑定:
command.BindByName = true;
然后顺序无关紧要。
推荐阅读
- post - 使用 RestAssured,我得到了部分响应。不知道我到底错过了什么
- firebase - Flutter FireStore 查询使用状态
- python - Django:嵌套的 OuterRef 无法访问祖父母的 ID
- reactjs - 没有浏览器刷新,MERN 赞成/反对投票不会更新
- grep - 如何在很长的单行字符串中查找带连字符的字符串?
- ruby - SignalFx:在 Ruby 代码中报告一个已获救的异常,类似于 NewRelic::Agent.notice_error?
- spring - 如果 BindingResult 在 Spring MVC 中有错误,如何保持在同一页面
- amazon-web-services - AWS 是否有类似于 resilince4j 的选项来在特定服务关闭时合并断路器模式
- c# - 破碎的 2D 平台游戏在 Unity 中翻转
- javascript - 如何过滤对象具有另一个数组的对象数组?