Dapper 无法运行程序并返回异常 PLS-00221

Posted

技术标签:

【中文标题】Dapper 无法运行程序并返回异常 PLS-00221【英文标题】:Dapper cannot run procedure and return exceptions PLS-00221 【发布时间】:2021-07-23 20:32:08 【问题描述】:

我在 Oracle 中有包含流水线功能的包。该功能起作用。但我无法通过 Dapper 运行此程序。

如果我使用下一个代码,我会得到结果。

var hostname = "calculation_workers";
var functionName = "MURR_IMPORT.MURR_TASKS.GET_ALL_SERVICES";
var parameters = new OracleDynamicParameters();
parameters.Add("inHostName", hostname, OracleMappingType.Varchar2, ParameterDirection.Input);
var result = dbConnection.Query<DbHostsMap>("SELECT * FROM MURR_IMPORT.MURR_TASKS.GET_ALL_SERVICES(:inHostName)", 
   parameters, 
   commandType: CommandType.Text);

如果我尝试使用 CommandType.StoredProcedure,则会收到异常 PLS-00221: 'GET_ALL_SERVICES' is not a procedure or undefined

var hostname = "calculation_workers";
var functionName = "MURR_IMPORT.MURR_TASKS.GET_ALL_SERVICES";
var parameters = new OracleDynamicParameters();
parameters.Add("inHostName", hostname, OracleMappingType.Varchar2, ParameterDirection.Input);
//Here I get the exception
var result = dbConnection.Query<DbHostsMap>(functionName, 
   parameters, 
   commandType: CommandType.StoredProcedure);

如何解决 PLS-00221 的问题?

【问题讨论】:

【参考方案1】:

你需要用table()包裹它:

SELECT * 
FROM table(MURR_IMPORT.MURR_TASKS.GET_ALL_SERVICES(:inHostName))

【讨论】:

以上是关于Dapper 无法运行程序并返回异常 PLS-00221的主要内容,如果未能解决你的问题,请参考以下文章

由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序

如何使用 Dapper 执行插入并返回插入的标识?

当负载增加时,Dapper 崩溃

Dapper - 如何将记录作为自定义对象类型返回?

从 dapper 中的多个查询返回可枚举的结果

Dapper for NET Core:插入表并返回插入行的 id