Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не работает хранимая функция в SQL Server 2008, помогите пожалуйста!  [new]
Voxman
Member

Откуда:
Сообщений: 28
Вот моя кособочная программа:

CREATE FUNCTION sale (@num int)
RETURNS real AS
BEGIN
DECLARE @c1 real, @bitt tinyint
SET @c1 = 0.01
SET @bitt = 1
DECLARE @output real
SET @output = 0
DECLARE @Delivery date, @Finish date, @Pay_now bigint
DECLARE cur1 SCROLL CURSOR FOR SELECT Delivery, Finish, Pay_now FROM Orders
OPEN cur1;
FETCH NEXT FROM cur1 INTO @Delivery, @Finish, @Pay_now
WHILE (@@fetch_status = 0 or @bitt = 0)

BEGIN
iF @Delivery <> NULL BEGIN
IF datediff(DAY, @Finish, @Delivery) <= 0 BEGIN
SET @output = @output + @Pay_now
END
ELSE BEGIN SET @bitt = 1 END
END
ELSE BEGIN IF datediff(DAY, @Finish, CURRENT_TIMESTAMP) > 0 BEGIN SET @bitt = 1 END;
FETCH NEXT FROM cur1 INTO @Delivery, @Finish, @Pay_now
END

close cur1
deallocate cur1
IF @bitt = 1 BEGIN SET @output = 0 END
ELSE BEGIN SET @output = @output * @c1
IF @output > 25 BEGIN SET @output = 25 END END
RETURN @output
END

Вот ошибки, которые возникают при попытке выполнить этот запрос:
Сообщение 1049, уровень 15, состояние 1, процедура sale, строка 396
Смешивание старого и нового синтаксиса для указания параметров курсора запрещено.
Сообщение 102, уровень 15, состояние 1, процедура sale, строка 30
Неправильный синтаксис около конструкции "END".
1 дек 11, 22:07    [11692765]     Ответить | Цитировать Сообщить модератору
 Re: Не работает хранимая функция в SQL Server 2008, помогите пожалуйста!  [new]
Glory
Member

Откуда:
Сообщений: 104751
Voxman
Вот ошибки, которые возникают при попытке выполнить этот запрос:

Какой "этот запрос" ?
Вы привели только скрипт создания функции
1 дек 11, 22:47    [11692888]     Ответить | Цитировать Сообщить модератору
 Re: Не работает хранимая функция в SQL Server 2008, помогите пожалуйста!  [new]
Voxman
Member

Откуда:
Сообщений: 28
Glory, я создаю эту функцию через запрос. Точнее: жму на клавишу Новый запрос, в открывшейся вкладке пишу вышеизложенное (в первом посте), жму кнопочку ! Выполнить, и в окне Сообщения вижу вышеперечисленные (в первом посте) ошибки.
1 дек 11, 22:51    [11692899]     Ответить | Цитировать Сообщить модератору
 Re: Не работает хранимая функция в SQL Server 2008, помогите пожалуйста!  [new]
Glory
Member

Откуда:
Сообщений: 104751
Voxman
Glory, я создаю эту функцию через запрос. Точнее: жму на клавишу Новый запрос, в открывшейся вкладке пишу вышеизложенное (в первом посте), жму кнопочку ! Выполнить, и в окне Сообщения вижу вышеперечисленные (в первом посте) ошибки.

И где же в вашем скрипте
Сообщение 1049, уровень 15, состояние 1, процедура sale, строка 396 ?
1 дек 11, 23:04    [11692936]     Ответить | Цитировать Сообщить модератору
 Re: Не работает хранимая функция в SQL Server 2008, помогите пожалуйста!  [new]
Voxman
Member

Откуда:
Сообщений: 28
Glory, вот в том то и проблема, что у меня нет такой строки. У меня действительно нет никакой идеи относительно того, что может означать ошибка в несуществующей строке!

Я выложил весь код, ничего кроме не было в запросе.
1 дек 11, 23:06    [11692943]     Ответить | Цитировать Сообщить модератору
 Re: Не работает хранимая функция в SQL Server 2008, помогите пожалуйста!  [new]
Glory
Member

Откуда:
Сообщений: 104751
И ознакомьтесь в хелпе с синтаксисом команды DECLARE CURSOR
1 дек 11, 23:16    [11692981]     Ответить | Цитировать Сообщить модератору
 Re: Не работает хранимая функция в SQL Server 2008, помогите пожалуйста!  [new]
Voxman
Member

Откуда:
Сообщений: 28
Glory, я ровно с этим же синтаксисом использовал курсор в хранимой процедуре. Хотя... тут явно перепутаны местами SCROLL и CURSOR, это согласно синтаксису.

Но вот почему же в такой форме у меня работает курсор в этом запросе (я только что его проверил и запустил, работает):
CREATE PROCEDURE percentage( @factor INT = OUTPUT ) AS
DECLARE @i real
DECLARE cur1 SCROLL CURSOR FOR SELECT Pay, Pay_now FROM Orders
FOR UPDATE
DECLARE @Pay bigint, @Pay_now bigint
OPEN cur1;
FETCH NEXT FROM cur1 INTO @Pay, @Pay_now
WHILE (@@fetch_status = 0)
BEGIN
SET @i = CAST ((@Pay-@Pay_now) AS real ) /100 * @factor
UPDATE Orders
SET Pay = @Pay + CAST (@i AS bigint)
WHERE CURRENT OF cur1
FETCH NEXT FROM cur1 into @Pay, @Pay_now
END
close cur1
deallocate cur1

Но это я так, спрашиваю, из естественного любопытства и недоумения... как один и тот же синтаксис работает и не работает.

А в чём проблема с END в моей программе (которая в первом посте)?!
1 дек 11, 23:25    [11693004]     Ответить | Цитировать Сообщить модератору
 Re: Не работает хранимая функция в SQL Server 2008, помогите пожалуйста!  [new]
Glory
Member

Откуда:
Сообщений: 104751
Voxman
Glory, я ровно с этим же синтаксисом использовал курсор в хранимой процедуре. Хотя... тут явно перепутаны местами SCROLL и CURSOR, это согласно синтаксису.


И Какой из двух декларированных синтаксисов хелпа вы использовали ?

Voxman
А в чём проблема с END в моей программе (которая в первом посте)?

Наверное потому, что их неправильное число ?
1 дек 11, 23:28    [11693016]     Ответить | Цитировать Сообщить модератору
 Re: Не работает хранимая функция в SQL Server 2008, помогите пожалуйста!  [new]
Voxman
Member

Откуда:
Сообщений: 28
Glory, я поставил CURSOR SCROLL - и заработало. (Ошибка 1049 исчезла)

Но SCROLL CURSOR я использовал в другой программе и она работала. Так вот, SCROLL CURSOR в программе из первого сообщения вызывал ошибку, а в программе из предыдущего сообщения не вызывает.

Да, верно, я нашёл, что недостаёт одного END.

Спасибо за помощь!
1 дек 11, 23:36    [11693041]     Ответить | Цитировать Сообщить модератору
 Re: Не работает хранимая функция в SQL Server 2008, помогите пожалуйста!  [new]
Glory
Member

Откуда:
Сообщений: 104751
Voxman
Но SCROLL CURSOR я использовал в другой программе и она работала.

DECLARE CURSOR нельзя использовать "в программе"
Это серверный синтаскис
1 дек 11, 23:43    [11693067]     Ответить | Цитировать Сообщить модератору
 Re: Не работает хранимая функция в SQL Server 2008, помогите пожалуйста!  [new]
Voxman
Member

Откуда:
Сообщений: 28
Glory, okey
1 дек 11, 23:48    [11693074]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить