Форум программистов, компьютерный форум, киберфорум
Firebird/InterBase
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/56: Рейтинг темы: голосов - 56, средняя оценка - 4.89
 Аватар для fezelly
1 / 1 / 1
Регистрация: 02.11.2009
Сообщений: 32

Курсор в хранимой процедуре

24.12.2009, 17:02. Показов 10415. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! использую в своей процедуре курсор первый раз. не могу понять почему не работает
Задача:записать в таблицу povtor людей, которые посетили магазин повторно в течении 3 месяцев.Входные данные nomlpu-номер магазина.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 BEGIN
  /* Procedure Text */
  
  FOR
--выводит всех людей которые сходили в определенный магазин (nomlpu)
--в определенное время с '01.05.2009' по '30.05.2009'
         SELECT
          r.fam,
          r.drod,
          r.datin,
          r.datout,
          r.p_no
         FROM reestr r
         WHERE  r.nomlpu=:nomlpu AND r.datout BETWEEN '01.05.2009' AND '30.05.2009'
         ORDER BY r.fam
         INTO :fam,
              :drod,
              :datin,
              :datt,
              :p_no
  do BEGIN
--объявляю курсор
--в запросе вывожу повторные случаи похождения человека в магазин 
   DECLARE C CURSOR FOR (SELECT  rr.fam,
                    rr.drod,
                    rr.datin,
                    rr.datout
            FROM reestr rr
            WHERE rr.datin<(:datt+90) AND rr.datin>:datt AND rr.pr_opl=1
            AND rr.p_no=TRIM(:p_no) AND rr.fam=TRIM(:fam) );
       BEGIN
            OPEN C;
            FETCH C INTO   :pfam,
                           :pdrod,
                           :pdatin,
                           :pdatout;
           WHILE (ROW_COUNT > 0) DO
            BEGIN
               INSERT INTO povtor(fam,
                                  drod,
                                  datein,
                                  dateout,
                                  pdatein,
                                  pdateout)
               VALUES (:fam,
                       :drod,
                       :datin,
                       :datt,
                       :pdatin,
                       :pdatout);
            END
   END
  suspend;
  CLOSE C;
END
пишет ошибку: Invalid token.DECLARE.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2009, 17:02
Ответы с готовыми решениями:

Ошибка в хранимой процедуре
Здраствуйте! Писал я хранимую процедуру которая проверяла правильность длины набивки номера удост.лич. Если неправильно то выдавала...

Ошибка в хранимой процедуре
Добрый день. Извините за срочность, мне нужно разобраться с хранимыми процедурами. Больно хороший преподаватель ничего не...

Вычисление в хранимой процедуре
Доброго времени суток =) есть таблица CREATE GENERATOR GEN_T_RABOTA_ID; CREATE TABLE T_RABOTA ( ID_RABOTA INTEGER NOT...

3
23 / 23 / 1
Регистрация: 20.12.2009
Сообщений: 74
24.12.2009, 17:43
Перед тем как пользоваться курсорами хоть примеры посмотрите, что ли...
http://www.firebirdsql.org/rls... ql-cursors

Но прежде подумайте - нужны ли здесь вообще курсоры? По-моему нет.
Таблица povtor - это вообще-то называется умным словом денормализация. Ваша задача на раз-два решается с использованием 1 запроса с GROUP BY ... HAVING.
1
 Аватар для fezelly
1 / 1 / 1
Регистрация: 02.11.2009
Сообщений: 32
25.12.2009, 11:28  [ТС]
Senya_L спасибо!!! что окликнулись и за ссылку.
написала просто одним запросом все:
SQL
1
2
3
4
5
6
7
8
9
SELECT r.fam,r.p_no,r.datin,r.datout,rrr.datin,rrr.datout
FROM reestr r
JOIN (SELECT rr.datin,rr.datout,rr.p_no
      FROM reestr rr
      WHERE rr.pr_opl=1 AND rr.nomlpu=6601) AS rrr ON r.p_no=rrr.p_no
WHERE r.pr_opl=1 AND r.nomlpu=6601
GROUP BY r.fam,r.p_no,r.datin,r.datout,rrr.datin,rrr.datout
HAVING rrr.datin<(r.datout+90) AND rrr.datin>r.datout
ORDER BY r.fam
0
23 / 23 / 1
Регистрация: 20.12.2009
Сообщений: 74
25.12.2009, 12:09
И что Вы нагородили? Зачем подцеплять таблицу, если она уже есть в списке выборки? Можно же проще

SQL
1
2
3
4
5
6
SELECT r.fam,r.p_no,r.datin,r.datout,r.datin,r.datout
FROM reestr r
WHERE r.pr_opl=1 AND r.nomlpu=6601 AND r.pr_opl=1 AND r.nomlpu=6601
GROUP BY r.fam,r.p_no,r.datin,r.datout,r.datin,r.datout
HAVING r.datin<(r.datout+90) AND r.datin>r.datout
ORDER BY r.fam
По-крайней мере этот запрос эквивалентен Вашему. Может задумка другой была?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2009, 12:09
Помогаю со студенческими работами здесь

Хранимой процедуре Firebird
Плиз! Люди подскажите создаю базу данных есть таблица в которую ввожу вводимые данные и есть столбцы которые по введенным данным...

Представление в хранимой процедуре
create view report as select * from credits where id=:in_id Parsing error на первой строке

Права пользователя в хранимой процедуре
сделал так в ibexpert в sqlmonitor, все хорошо, права пользователем получены, а в хранимой процедуре parsing error grant select, delete,...

Запрос из строковой переменной в хранимой процедуре
Здравствуйте, ребята. Подскажите, пожалуйста, как реализовать следующую задумку. Создаю хранимую процедуру с входными параметрами....

Непонятки с типами данных в хранимой процедуре
Здравствуйте, есть кусок хранимой процедуры: if (mod (:pivrichchya, 2) = 0) then values = '2, 4, 6, 8, 10'; else values = '1, 3,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru