PLS-00306:.NET Entity Framework中的参数数量或类型错误

时间:2014-10-14 12:06:06

标签: oracle entity-framework-4

我正在使用带有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?还是我需要通过这个参数?

1 个答案:

答案 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中无处不在,我还没有找到一种让它变得动态的好方法。