使用Entity Framework调用Oracle存储过程VANCE_TEST,我得到PLS-00302:必须声明组件'VANCE_TEST'

时间:2013-01-09 23:06:04

标签: oracle stored-procedures entity-framework-4

我已经完成了所有类似的问题,但我没有成功。

在Visual Studio 2010中,我正在创建一个调用Oracle存储过程的MVC Web应用程序。我甚至无法调用一个非常简单的存储过程。这是一个简单的存储过程:

CREATE OR REPLACE PROCEDURE VANCE_TEST ( PARTNERS OUT sys_refcursor ) AS
BEGIN
  OPEN PARTNERS FOR SELECT COMPANY_NAME, SUN FROM PARTNER WHERE MARKET_IDX = 16;
END;
/

两列都是Varchar2类型。当我从SQL * Plus调用该过程时,使用此代码可以正常工作:

var rc refcursor
execute VANCE_TEST( :rc );
print rc;

在我的web.config文件中,我有以下规范,用于定义存储过程的游标:

  <oracle.dataaccess.client>
    <settings>
      <add name="PARTNER.VANCE_TEST.RefCursor.PARTNERS" value="implicitRefCursor bindinfo='mode=Output'" />
      <add name="PARTNER.VANCE_TEST.RefCursorMetaData.PARTNERS.Column.0" value="implicitRefCursor metadata='ColumnName=COMPANY_NAME;BaseSchemaName=PARTNER;BaseTableName=PARTNER;NativeDataType=Varchar2;ProviderType=Varchar2;ProviderDBType=String;DataType=System.String;ColumnSize=100;AllowDBNull=true'" />
      <add name="PARTNER.VANCE_TEST.RefCursorMetaData.PARTNERS.Column.1" value="implicitRefCursor metadata='ColumnName=SUN;BaseSchemaName=PARTNER;BaseTableName=PARTNER;NativeDataType=Varchar2;ProviderType=Varchar2;ProviderDBType=String;DataType=System.String;ColumnSize=10;AllowDBNull=true'" />
    </settings>
  </oracle.dataaccess.client>

当我执行添加功能导入时,这工作正常,并且VS能够为返回的数据创建复杂类型VANCE_TEST_Result。 PARTNER是模式名称,在我在VANCE_TEST之前添加之前,Add Function Import无法看到返回的列。

在我的程序中,使用Models.Entities对PARTNER表进行Linq查询没有任何问题,我有以下代码:

using (Models.Entities db = new Models.Entities())
{
    IEnumerable<Models.VANCE_TEST_Result> results = db.VANCE_TEST();

当我执行它时,我在db.VANCE_TEST()中得到一个异常:

public ObjectResult<VANCE_TEST_Result> VANCE_TEST()
{
    return base.ExecuteFunction<VANCE_TEST_Result>("VANCE_TEST");
}

ExecuteFunction(我无法追踪)会抛出Oracle的多行错误的Oracle.DataAccess.Client.OracleException:

ORA-06550: line 1, column 17: 
PLS-00302: component 'VANCE_TEST' must be declared 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored

有关这里发生了什么的任何提示?或者我如何获得正在发送的实际SQL代码?我试图从其他Stackoverflow文章中学习,并尽可能地解决它,因为一旦他们解决了问题:

Oracle stored proc call returning exception ORA-06550 with PLS-00103

提前感谢您可以解决的任何问题。

1 个答案:

答案 0 :(得分:0)

您是否以用户PARTNER身份连接到数据库?如果没有,那么也许这可能会有所帮助?

return base.ExecuteFunction<VANCE_TEST_Result>("PARTNER.VANCE_TEST");