2016-06-22 9 views
0

У меня есть эта хранимая процедура:хранимой процедуры через службу данных

CREATE OR REPLACE PROCEDURE GET_NEXT_ID(NEXTID OUT INTEGER) 
IS 
BEGIN 
    SELECT SQC_RS_PEDIDO.NEXTVAL INTO NEXTID FROM DUAL; 
END GET_NEXT_ID; 

Чтобы получить следующий идентификатор. Затем я добавил эту хранимую процедуру в службу данных и импортированную функцию.

Автоматический код, который создается на моей службе данных является:

public ObjectResult<Nullable<global::System.Decimal>> GET_NEXT_ID(ObjectParameter nEXTID) 
{ 
    return base.ExecuteFunction<Nullable<global::System.Decimal>>("GET_NEXT_ID", nEXTID); 
} 

Затем выставить это на моей службе данных я использовал:

[WebGet] 
public ObjectResult<decimal?> GET_NEXT_ID() 
{ 
    return this.CurrentDataSource.GET_NEXT_ID(new ObjectParameter("NEXTID", typeof(Decimal))); 
} 

Но я получаю исключение:

The data reader returned by the store data provider does not have enough columns for the query requested.

Что я делаю неправильно?

ответ

0

Ваш запрос ожидает, что читатель вернет идентификатор в качестве выбора, но ваша хранимая процедура настроена так, чтобы передать параметр обратно через выходную переменную. Простое исправление будет просто возвращать значение из оператора select и не вставлять его в выходную переменную.

+0

Не могли бы вы привести пример? –

+0

Я не понимаю синтаксис базы данных (Oracle?), Но в основном в стандартном SQL я бы сделал: выберите NEXTVAL. Вы должны выбрать идентификатор из БД, а не возвращать его как выходную переменную и не возвращать его с помощью инструкции RETURN, чтобы заставить ваш код WCF работать. Или измените код WCF, но я точно не знаю, какой синтаксис для ExecuteFunction тоже изменит. –

1

Попробуйте объявить функцию в базе данных, а не процедуру.

CREATE OR REPLACE FUNCTION GET_NEXT_ID RETURN INTEGER IS 

NEXTID INTEGER; 

BEGIN 

    SELECT SQC_RS_PEDIDO.NEXTVAL INTO NEXTID FROM DUAL; 

    RETURN NEXTID; 

END GET_NEXT_ID; 
+0

Когда я бегу, что я получаю ошибку: Предупреждение: составлено, но с ошибками компиляции также: [Ошибка] Синтаксис проверки (1: 40): Найдено: «IS» Ожидая: RETURN -или- (-или - WRAPPED-or-TIMESTAMP –

+0

Я предполагаю, что это Oracle. Можете ли вы опубликовать сообщение об ошибке? –

+0

Да, это Oracle. Когда я тестирую код, мне дают: [Ошибка] Проверка синтаксиса (1: 40): Найдено: 'IS «Ожидание: RETURN -или- (-или- WRAPPED -или-TIMESTAMP –

Смежные вопросы