我正在使用带有EDM的Oracle 11g(使用ODP.net)。我的Oracle SP返回一个Ref Cursor,我无法从EDM运行它。我为SP创建了一个复杂类型并添加了函数import,选择返回值作为复杂类型。
运行应用程序后,出现以下错误:
ORA-06550:第1行第8列:PLS-00306:错误的数字或类型 调用' GetScriptDetail'的参数。 ORA-06550:第1行第8列: PL / SQL:声明IGNORED
我的App.config:
add name="SYSTEM.GetScriptDetail.RefCursor.cv_1" value="implicitRefCursor bindinfo='mode=Output'"
add name="SYSTEM.GetScriptDetailbyAITID.RefCursorMetaData.cv_1.Column.0" value="implicitRefCursor metadata='ColumnName=TITLE;BaseColumnName=TITLE;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'"
我的功能导入包含:
public ObjectResult<GETSCRIPTDETAIL_Result> GETSCRIPTDETAIL(Nullable<global::System.Decimal> v_ID)
{
ObjectParameter v_IDParameter;
if (v_ID.HasValue)
{
v_IDParameter = new ObjectParameter("V_ID", v_ID);
}
else
{
v_IDParameter = new ObjectParameter("V_ID", typeof(global::System.Decimal));
}
return base.ExecuteFunction<GETSCRIPTDETAIL_Result>("GETSCRIPTDETAIL", v_IDParameter);
}
来自&#34;返回的例外情况 base.ExecuteFunction(&#34; GETSCRIPTDETAIL&#34 ;, v_IDParameter);
我的Oracle SP参数为:
v_ID IN NUMBER DEFAULT NULL
,
cv_1 OUT SYS_REFCURSOR
如何将refcursor输出作为参数传递给executefuction?还是我需要通过这个参数?
答案 0 :(得分:2)
您需要在.config文件中添加以下内容
<oracle.manageddataaccess.client>
<version number="*">
<implicitRefCursor>
<storedProcedure schema="schemaname" name="GETSCRIPTDETAIL">
<refCursor name="CV_1">
<bindInfo mode="Output" />
</refCursor>
</storedProcedure>
</implicitRefCursor>
</version>
</oracle.manageddataaccess.client>
我已经在这里找到了可以直接在VS中自动执行此操作的步骤:http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/appdev/dotnet/EntityFrameworkOBE/EntityFrameworkOBE.html#section5
现在我的问题是架构名称在配置和edmx中无处不在,我还没有找到一种让它变得动态的好方法。