Задать вопрос
@razdvatri123

Ошибки в написании курсора sybase?

Сам запрос отдельно работает, а вот с курсором - нет.
(sybase 12.3)
sql
create procedure test_saldo
(@data_begin DATE, @data_end DATE)
AS
BEGIN
    -- Объявление переменных для расчета
    DECLARE 
        @saldo int, 
        @debet int, 
        @kredit int

    -- Инициализация переменных
    SET @saldo = 0
    SET @debet = 0
    SET @kredit = 0

    -- Выполнение первых запросов для выборок в таблицы
    SELECT 
       prihod
    INTO #prih_rash   
    FROM prih_rash

    SELECT 
      ostatok
    INTO #ostatok
    FROM ostatok
    
    SELECT 
       ostatok_sal
    INTO #ostatok_saldo
    FROM ostatok_saldo
 
    -- Объявление и работа с курсором
    DECLARE cur CURSOR FOR 
    SELECT  *
    FROM (
        SELECT          
          *
        FROM #prih_rash prih_rash
        LEFT JOIN #ostatok zm ON  prih_rash.name = zm.name
        LEFT JOIN #ostatok ostat  ON ostat.name =  prih_rash.name
        LEFT JOIN #ostatok_saldo os ON ostat.name = os.name
   
    ) AS res

    -- Открытие курсора
    OPEN cur
    
    -- Цикл для работы с курсором
    FETCH NEXT FROM cur INTO @saldo ;-- Загружаем первую строку

    -- Обработка данных
    WHILE @@FETCH_STATUS = 0
    BEGIN
        -- Ваши вычисления для saldo
        SET @saldo = @saldo + @debet - @kredit

        -- Считываем следующую строку
        FETCH NEXT FROM cur INTO @saldo;
    END;

    -- Закрытие и освобождение курсора
    CLOSE cur;
    DEALLOCATE cur;

 

    -- Удаление временных таблиц
    DROP TABLE #ostatok
    DROP TABLE #prih_rash
    DROP TABLE #ostatok_saldo
END
GO


Ошибка
Incorrect syntax near the keyword 'FROM'.
 Must declare variable '@@FETCH_STATUS'.
 Incorrect syntax near the keyword 'FROM'.

Я думаю у меня ошибки в структуре.
  • Вопрос задан
  • 42 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@elderl
Checking the status from the last fetch
Using cursors in stored procedures

Да и в логике ошибка:
SET @saldo = @saldo + @debet - @kredit
        -- Считываем следующую строку
  FETCH NEXT FROM cur INTO @saldo;
То есть считаете значение переменной, а следующей строкой его зитираете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы