powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите разобраться с курсорами...
11 сообщений из 11, страница 1 из 1
Помогите разобраться с курсорами...
    #32304643
Привет всем. Проблема в том, что мне необходимо в Stored Procedure сравнить две выборки из таблицы. Планиирую сделать это с помощью курсоров... Никак не пойму - как и где определять курсоры в SP???
...
Рейтинг: 0 / 0
Помогите разобраться с курсорами...
    #32304679
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак. Вместо курсоров FOR SELECT используется.
...
Рейтинг: 0 / 0
Помогите разобраться с курсорами...
    #32304816
хех... И For Select у меня тож используется...

Ситуация следующая - у меня обсчитывается одна фигня; данные для расчета собираются из трех таблиц... В одной лежит заголовочная часть - название и ID, в другой - входящие компоненты, в третьих - расчетные коэффициенты... В случае, если я делаю For Select - иногда попадаются компоненты, которые не учитываются... Просто потому, что в таблице вхождения запись есть, а компонент удален... естессно, при выполнении запроса этой вхождение игнорируется... Отсюда - кривые результаты. Я использую такой алгоритм - сначала делаю тупой запрос по таблице вхождения - просто смотрю, сколько вхождений по такому ИП имеется. Потом выполняю рабочий запрос - и смотрю, сколько там записей взялось... Если есть расхождения - значит, есть нарушение актуальности БД. Запускаю процедуру автоматического восстановления - чтобы восстановить недостающий компонент в справочнике. Т.о. он автоматом восстанавливается для всех последующих вхождений и проверок больше не требуется ;) После восстановления просто запускаю рабочий цикл и все.
Раньше прога использовала парадокс - в дельфях достаточно просто все это делалось.... Как это сделать в интербейзе - ума не приложу... Create Table из процедуры не катит... Нашел, что можно сделать подобное с использованием курсоров - но никак не пойму, каким именно образом задекларировать курсор...

Если можно обойтись без курсоров - подскажите, плз... Интербейз тока начал изучать - посему глаза на затылке :(. Могу запросто пройти мимо очевидного решения. Или сделать два вложенных For Select??? Это не отразится на скорости работы??? Вроде как вложенные запросы являются моветоном при программировании БД ;)
...
Рейтинг: 0 / 0
Помогите разобраться с курсорами...
    #32304887
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ого, вы закрутили - я не въехал - может конец недели влияет :-/
В общем:
1) поддержки курсоров в том виде, в котором они есть в оракле к примеру, в ИБ нету.
2) В FireBird 1.5 есть команда EXECUTE STATEMENT - там можно ваполнять почти любые команды, в т.ч. DDL, но лучше не надо.
3) Вложенные циклы FOR SELECT - это большое добро и от них никуда не деться. Часто ХП с вложенными подзапросами работают быстрее обычных запросов с соединениями.

В общем я так понял, что вас спасёт оператор EXISTS
...
Рейтинг: 0 / 0
Помогите разобраться с курсорами...
    #32304889
Понятно, спасибо...

Оффтоп - а что, кукисы в этом форуме не работают??? Не хочется всякий раз набирать имя и пассворд
...
Рейтинг: 0 / 0
Помогите разобраться с курсорами...
    #32304890
хех... А вот EXISTS я не нашелс той доке по интербейзу, что у меня есть... Это, правда, по 6.0... Firebird 1.5 эту функцию поддерживает??? Если да - где почитать??

А на вложенных циклах я уже набросал одну функцию - красиво получилось :D вообще - то, что в дельфях кучей кода делается, в интербейзе - 4-5 строк :) Утрирую, конечно - но мне нравится... Красиво :D
...
Рейтинг: 0 / 0
Помогите разобраться с курсорами...
    #32304893
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понял, что они для каждой сессии создаются и сбрасываются по таймауту.
...
Рейтинг: 0 / 0
Помогите разобраться с курсорами...
    #32305157
Я так понял, что они для каждой сессии создаются и сбрасываются по таймауту. - насколько я понял, это про кукисы штоль??? НЕпонятно - зачем их сбрасывать по таймауту...

Так где мне найти доку по Firebird навроде того, что шло к IB 6.0???
...
Рейтинг: 0 / 0
Помогите разобраться с курсорами...
    #32305386
Вот еще что...

Select Count(*) From
Select "Prods"."Price","PriceDB"."Mass","UchEd"."EdCoeff")
From "Prods", "PriceDB", "UchEd"
Where ("PriceDB"."IDPr"="Prods"."ID") and
("PriceDB"."IDBl"=:BludID) and
("Prods"."UchEd"="UchEd"."EdName")
Into :PriceRecCount;

Эта конструкция не работает :( Смысл - посчитать количество записей в наборе данных, возвращаемом вторым Select-запросом. Собственно, курсор мне нужен именно для того, чтобы сохранить результаты запроса во временном хранилище... И посчитать количество строк в нем... Как сделать??? Я тут в доках на IB 6.0 прочитал, что есть возможность запрос описать в виде предопределения... Тогда, возможно, оно и сработало бы... Как это сделать???
...
Рейтинг: 0 / 0
Помогите разобраться с курсорами...
    #32305879
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) EXISTS(<select expression>) просто проберяет, возвращает ли запрос внутри этого оператора хоть одну запись.

2) автор писал:Select Count(*) From
Select "Prods"."Price","PriceDB"."Mass","UchEd"."EdCoeff")
From "Prods", "PriceDB", "UchEd"
Where ("PriceDB"."IDPr"="Prods"."ID") and
("PriceDB"."IDBl"=:BludID) and
("Prods"."UchEd"="UchEd"."EdName")
Into :PriceRecCount;

На данный момент не поддерживается SELECT FROM SELECT. Я не понимаю вобще-то, почему здесь нельзя выбрать кол-во одним запросом:
Код: plaintext
1.
2.
3.
4.
5.
Select Count(*) From 
From  "Prods" ,  "PriceDB" ,  "UchEd"  
Where ( "PriceDB" . "IDPr" = "Prods" . "ID" ) and 
( "PriceDB" . "IDBl" =:BludID) and 
( "Prods" . "UchEd" = "UchEd" . "EdName" ) 
Into :PriceRecCount; 


3) автор писал:Я тут в доках на IB 6.0 прочитал, что есть возможность запрос описать в виде предопределения... Тогда, возможно, оно и сработало бы... Как это сделать???
Я не понял что это значит. Возможно вы читали это в отношении EMBEDDED SQL - это не то.
...
Рейтинг: 0 / 0
Помогите разобраться с курсорами...
    #32306692
Запрос сработал, спасибо :D Только с одним уточнением - второй From убрать надо...
Хочу проверить EXISTS... Хотя в доке (читал LangRef.pdf из комплекта поставки к IB 6.0 в разделе SQL Statement and Function Reference) не нашел такой функции...
Почему и спрашиваю - где найти хотя бы дополнения к базовому диалекту IB 6.0, появившиеся в Firebird 1.5.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите разобраться с курсорами...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]