|
|
|
Помогите разобраться с курсорами...
|
|||
|---|---|---|---|
|
#18+
Привет всем. Проблема в том, что мне необходимо в Stored Procedure сравнить две выборки из таблицы. Планиирую сделать это с помощью курсоров... Никак не пойму - как и где определять курсоры в SP??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2003, 16:32 |
|
||
|
Помогите разобраться с курсорами...
|
|||
|---|---|---|---|
|
#18+
Никак. Вместо курсоров FOR SELECT используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2003, 16:52 |
|
||
|
Помогите разобраться с курсорами...
|
|||
|---|---|---|---|
|
#18+
хех... И For Select у меня тож используется... Ситуация следующая - у меня обсчитывается одна фигня; данные для расчета собираются из трех таблиц... В одной лежит заголовочная часть - название и ID, в другой - входящие компоненты, в третьих - расчетные коэффициенты... В случае, если я делаю For Select - иногда попадаются компоненты, которые не учитываются... Просто потому, что в таблице вхождения запись есть, а компонент удален... естессно, при выполнении запроса этой вхождение игнорируется... Отсюда - кривые результаты. Я использую такой алгоритм - сначала делаю тупой запрос по таблице вхождения - просто смотрю, сколько вхождений по такому ИП имеется. Потом выполняю рабочий запрос - и смотрю, сколько там записей взялось... Если есть расхождения - значит, есть нарушение актуальности БД. Запускаю процедуру автоматического восстановления - чтобы восстановить недостающий компонент в справочнике. Т.о. он автоматом восстанавливается для всех последующих вхождений и проверок больше не требуется ;) После восстановления просто запускаю рабочий цикл и все. Раньше прога использовала парадокс - в дельфях достаточно просто все это делалось.... Как это сделать в интербейзе - ума не приложу... Create Table из процедуры не катит... Нашел, что можно сделать подобное с использованием курсоров - но никак не пойму, каким именно образом задекларировать курсор... Если можно обойтись без курсоров - подскажите, плз... Интербейз тока начал изучать - посему глаза на затылке :(. Могу запросто пройти мимо очевидного решения. Или сделать два вложенных For Select??? Это не отразится на скорости работы??? Вроде как вложенные запросы являются моветоном при программировании БД ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2003, 18:35 |
|
||
|
Помогите разобраться с курсорами...
|
|||
|---|---|---|---|
|
#18+
Ого, вы закрутили - я не въехал - может конец недели влияет :-/ В общем: 1) поддержки курсоров в том виде, в котором они есть в оракле к примеру, в ИБ нету. 2) В FireBird 1.5 есть команда EXECUTE STATEMENT - там можно ваполнять почти любые команды, в т.ч. DDL, но лучше не надо. 3) Вложенные циклы FOR SELECT - это большое добро и от них никуда не деться. Часто ХП с вложенными подзапросами работают быстрее обычных запросов с соединениями. В общем я так понял, что вас спасёт оператор EXISTS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2003, 20:29 |
|
||
|
Помогите разобраться с курсорами...
|
|||
|---|---|---|---|
|
#18+
Понятно, спасибо... Оффтоп - а что, кукисы в этом форуме не работают??? Не хочется всякий раз набирать имя и пассворд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2003, 20:33 |
|
||
|
Помогите разобраться с курсорами...
|
|||
|---|---|---|---|
|
#18+
хех... А вот EXISTS я не нашелс той доке по интербейзу, что у меня есть... Это, правда, по 6.0... Firebird 1.5 эту функцию поддерживает??? Если да - где почитать?? А на вложенных циклах я уже набросал одну функцию - красиво получилось :D вообще - то, что в дельфях кучей кода делается, в интербейзе - 4-5 строк :) Утрирую, конечно - но мне нравится... Красиво :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2003, 20:36 |
|
||
|
Помогите разобраться с курсорами...
|
|||
|---|---|---|---|
|
#18+
Я так понял, что они для каждой сессии создаются и сбрасываются по таймауту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2003, 20:36 |
|
||
|
Помогите разобраться с курсорами...
|
|||
|---|---|---|---|
|
#18+
Я так понял, что они для каждой сессии создаются и сбрасываются по таймауту. - насколько я понял, это про кукисы штоль??? НЕпонятно - зачем их сбрасывать по таймауту... Так где мне найти доку по Firebird навроде того, что шло к IB 6.0??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2003, 17:09 |
|
||
|
Помогите разобраться с курсорами...
|
|||
|---|---|---|---|
|
#18+
Вот еще что... 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 прочитал, что есть возможность запрос описать в виде предопределения... Тогда, возможно, оно и сработало бы... Как это сделать??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2003, 14:54 |
|
||
|
Помогите разобраться с курсорами...
|
|||
|---|---|---|---|
|
#18+
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. 3) автор писал:Я тут в доках на IB 6.0 прочитал, что есть возможность запрос описать в виде предопределения... Тогда, возможно, оно и сработало бы... Как это сделать??? Я не понял что это значит. Возможно вы читали это в отношении EMBEDDED SQL - это не то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2003, 11:58 |
|
||
|
Помогите разобраться с курсорами...
|
|||
|---|---|---|---|
|
#18+
Запрос сработал, спасибо :D Только с одним уточнением - второй From убрать надо... Хочу проверить EXISTS... Хотя в доке (читал LangRef.pdf из комплекта поставки к IB 6.0 в разделе SQL Statement and Function Reference) не нашел такой функции... Почему и спрашиваю - где найти хотя бы дополнения к базовому диалекту IB 6.0, появившиеся в Firebird 1.5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2003, 19:02 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=499&tid=1579753]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 340ms |

| 0 / 0 |
