nPLS-00306: неверный номер или типы аргументов в вызове

1

Извините, если вопрос повторяется. У меня есть два проекта в моем решении: консольное приложение и веб-сайт MVC4. Я использую управляемые drviers для доступа к Oracle 11g. Я пытаюсь извлечь данные из следующей хранимой процедуры:

create or replace procedure "GETEMPIDS"
    (
       p_cursor OUT SYS_REFCURSOR
    )
is
begin
    OPEN p_cursor FOR
select *
    from EMP;
end;​

После создания сущностей и других вещей в моем консольном приложении, я получаю данные, делая:

 public List<GETEMPIDS_Result> GetAllEmployees()
        {
            Entities db = new Entities();
            List<GETEMPIDS_Result> result = db.GETEMPIDS().ToList<GETEMPIDS_Result>();
            return result;
        }

Я добавил ссылку на это консольное приложение на своем веб-сайте, но когда я вызываю метод выше в моем контроллере, он дает исключение:

"ORA-06550: line 1, column 8:\nPLS-00306: wrong number or types of arguments in call to 'GETEMPIDS'\nORA-06550: line 1, column 8:\nPL/SQL: Statement ignored"}

в следующей строке в контексте класса

public virtual System.Data.Entity.Core.Objects.ObjectResult<GETEMPIDS_Result> GETEMPIDS()
        {
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<GETEMPIDS_Result>("GETEMPIDS");
        }

Есть что-то, чего я не хватает?

Теги:
entity-framework-6
asp.net-mvc-4
sys-refcursor

2 ответа

2
Лучший ответ

Когда мы добавляем результат хранимой процедуры в сущности, он добавляет некоторый код, относящийся к выходным полям в файле конфигурации.

 <implicitRefCursor>
    <storedProcedure schema="AHSEN" name="GETEMPIDS">
      <refCursor name="P_CURSOR">
        <bindInfo mode="Output" />
        <metadata columnOrdinal="0" columnName="EMPNO" providerType="Int16" allowDBNull="false" nativeDataType="Number" />
        <metadata columnOrdinal="1" columnName="ENAME" providerType="Varchar2" allowDBNull="true" nativeDataType="Varchar2" />
        <metadata columnOrdinal="2" columnName="JOB" providerType="Varchar2" allowDBNull="true" nativeDataType="Varchar2" />
        <metadata columnOrdinal="3" columnName="MGR" providerType="Int16" allowDBNull="true" nativeDataType="Number" />
        <metadata columnOrdinal="4" columnName="HIREDATE" providerType="Date" allowDBNull="true" nativeDataType="Date" />
        <metadata columnOrdinal="5" columnName="SAL" providerType="Single" allowDBNull="true" nativeDataType="Number" />
        <metadata columnOrdinal="6" columnName="COMM" providerType="Single" allowDBNull="true" nativeDataType="Number" />
        <metadata columnOrdinal="7" columnName="DEPTNO" providerType="Int16" allowDBNull="true" nativeDataType="Number" />
      </refCursor>
    </storedProcedure>
  </implicitRefCursor>

Моя проблема была решена, когда я скопировал этот код и вставил его в файл конфигурации моего сайта.

0

Ваша процедура GETEMPIDS принимает параметр p_cursor OUT SYS_REFCURSOR в качестве параметра. По-видимому, вы должны объявить ResultSet и передать его процедуре. Как это:

ResultSet rs = new ResultSet;
List<GETEMPIDS_Result> result = db.GETEMPIDS(  rs  ).ToList<GETEMPIDS_Result>();

К сожалению, ResultSet для Java, я не заметил С# в тегах. Во всяком случае, я надеюсь, что вы поняли эту идею.

  • 0
    Ну ... Я был взволнован тем, что получил ответ :) Спасибо, хотя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню