【问题标题】:Oracle stored proc call returning exception ORA-06550 with PLS-00103Oracle 存储过程调用返回异常 ORA-06550 和 PLS-00103
【发布时间】:2012-03-26 22:56:23
【问题描述】:

我正在尝试通过实体框架数据上下文执行 Oracle 存储过程。我的存储过程如下所示:

PROCEDURE "GET_SUPPLIERS" (
    SUPP_LIST OUT SYS_REFCURSOR) AS
BEGIN 

    OPEN SUPP_LIST FOR 
    SELECT 
        SUPPLIER_NAME 
    FROM 
        A_SUPPLIER  ;

END;

App.config 设置:

  <oracle.dataaccess.client>
    <settings>
      <add name="SYSADM.GET_SUPPLIERS.RefCursor.0" value="implicitRefCursor bindinfo='mode=Output'" />


      <add name="SYSADM.GET_SUPPLIERS.RefCursorMetaData.0.Column.0"
           value="implicitRefCursor metadata='ColumnName=SUPPLIER_NAME;
           BaseColumnName=SUPPLIER_NAME;BaseSchemaName=SYSADM;BaseTableName=A_SUPPLIER;
           NativeDataType=varchar2;ProviderType=Varchar2;
           ProviderDBType=String;DataType=System.String;
           ColumnSize=10;AllowDBNull=true'" />


    </settings>
  </oracle.dataaccess.client>

我调用代码如下:

    var ctx = new Supplier.SupplierEntities();
    Supplier.GET_SUPPLIERS_Result1 r = ctx.GET_SUPPLIERS().FirstOrDefault();

在下面一行:

public ObjectResult<GET_SUPPLIERS_Result1> GET_SUPPLIERS()
{
    return base.ExecuteFunction<GET_SUPPLIERS_Result1>("GET_SUPPLIERS");
}

我得到以下异常

ORA-06550: line 1, column 32:
PLS-00103: Encountered the symbol ">" when expecting one of the following:

   ( ) - + case mod new not null <an identifier>
   <a double-quoted delimited-identifier> <a bind variable>
   table continue avg count current exists max min prior sql
   stddev sum variance execute multiset the both leading
   trailing forall merge year month day hour minute second
   timezone_hour timezone_minute timezone_region timezone_abbr
   time timestamp interval date
   <a string literal with character set specification>

【问题讨论】:

    标签: oracle entity-framework stored-procedures oracle11g ora-06550


    【解决方案1】:

    尝试将您的名称参数更新为

    SYSADM.GET_SUPPLIERS.RefCursor.SUPP_LIST

    SYSADM.GET_SUPPLIERS.RefCursorMetaData.SUPP_LIST.Column.0

    Entity Framework 总是使用 BindByName 来运行存储过程(而不是参数的位置表示法)。

    【讨论】:

    • 我还应该提到更新元数据行:SYSADM.GET_SUPPLIERS.RefCursorMetaData.SUPP_LIST.Column.0。你也更新了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2012-08-25
    • 2014-01-18
    • 2012-11-24
    相关资源
    最近更新 更多