使用 Dapper 执行 Oracle 包的功能
Posted
技术标签:
【中文标题】使用 Dapper 执行 Oracle 包的功能【英文标题】:Executing an Oracle package's function using Dapper 【发布时间】:2018-07-03 21:05:06 【问题描述】:我正在尝试使用 Dapper 执行 am Oracle 包的功能,但收到 ORA-06550 错误消息:
ORA-06550: line 1, column 7:PLS-00221: 'MYFUNC' is not a procedure or is undefinedORA-06550: line 1, column 7:PL/SQL: Statement ignored
我能够在 Oracle 的 SQL Developer 中成功执行该函数:
DECLARE
PARAM1 NUMBER;
PARAM2 NUMBER;
v_Return VARCHAR2(200);
BEGIN
PARAM1 := 1;
PARAM2 := 2;
v_Return := MYPACKAGE.MYFUNC(
PARAM1 => PARAM1,
PARAM2 => PARAM2
);
/* Legacy output:
DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);
*/
:v_Return := v_Return;
--rollback;
END;
但是当尝试使用 dapper 做同样的事情时:
var storedProc = @"MYPACKAGE.MYFUNC";
return _connection.Query<string>(storedProc, new PARAM1 = 1, PARAM2 = 2 , commandType: CommandType.StoredProcedure).SingleOrDefault();
我收到上面的错误消息。有什么想法吗?
【问题讨论】:
***.com/q/27620159/908929 感谢@Maxwell77,但解决方案中提到的这两个条件都不是这种情况。 【参考方案1】:我遇到了同样的错误消息,并且在安装 Oracle 的 Nuget 包 Oracle.ManagedDataAccess 后它消失了。
我并不完全清楚你的功能是做什么的。它是递归的吗? 无论如何,当你使用 out 参数时,你应该阅读这篇文章: call-oracle-store-procedure-with-dapper。 它基于 OracleDynamicParameters 类。
我也觉得这很有趣,但我还没有尝试过:Nuget 包Dapper.Oracle。
【讨论】:
以上是关于使用 Dapper 执行 Oracle 包的功能的主要内容,如果未能解决你的问题,请参考以下文章
执行 Oracle INSERT ALL 时如何在 Dapper 中执行异步
.NET(C#) Dapper Oracle(ODP.NET)或SQL Server 执行多条查询(select)语句的方法代码