【问题标题】:Using Entity Framework to call Oracle stored procedure VANCE_TEST, I get PLS-00302: component 'VANCE_TEST' must be declared使用实体框架调用 Oracle 存储过程 VANCE_TEST,我得到 PLS-00302:必须声明组件“VANCE_TEST”
【发布时间】:2013-01-10 08:56:05
【问题描述】:

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

在 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 之前添加它。

在我的程序中,使用 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.DataAccess.Client.OracleException,其中包含来自 Oracle 的多行错误:

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

提前感谢您对此提供的任何启示。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,但我以 PARTNER 的身份连接,这不起作用。
    猜你喜欢
    • 1970-01-01
    • 2021-05-05
    • 2019-01-25
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多