Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Не могу разобраться с языком DB2. Ниже привожу текст хранимой процедуры InterBase Пожалуйста изобразите как она будет выглядеть в DB2. CREATE PROCEDURE BA_TST RETURNS ( P1 VARCHAR(3), P3 VARCHAR(15)) AS DECLARE VARIABLE P2 BIGINT; begin for select grafik.raion,grafik.id_regnum from grafik where grafik.raion='003' into :p1, :p2 do begin select masterregnum.regnum from masterregnum where masterregnum.id_regnum=:p2 into : p3; suspend; end end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 14:22 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 14:50 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Да так я и сам смогу написать !!!!!!!!!!!!!!!!!! Мне нужен пример как сохранить каждую строку первого селекта в переменные, а потом эти переменные использовать во втором селекте ! Вот в чём смысл вопроса ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 15:10 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 15:23 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Не работает у меня этот код ! У меня версия 8.1 Опять же вопрос по коду: во втором селекте результат запоминается в переменную (или в параметр) А как результат первого селекта и параметр вернуть на клиент единым набором данных ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 08:35 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Виноват. Должно быть: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Выходные параметры объявляются примерно так: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 10:49 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
power-baaНе могу разобраться с языком DB2. Ниже привожу текст хранимой процедуры InterBase Пожалуйста изобразите как она будет выглядеть в DB2. Эти два запроса можно и нужно переписать как один (оформив, если нужно, как view). Примерно так: Код: plaintext 1. 2. 3. 4. 5. Так, как вы написали, она всё равно выглядеть не будет. И слава богу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 12:07 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein ... Как возвращать набор данных, смотрите выше. Выходные параметры объявляются примерно так: ... Марк, вам стоило бы познакомиться с Interbase. Приведённый в первом письме код в DB2 соответствует не хранимой процедуре, а UDF. Вызывается как select p1, p3 from BA_TST. Внутри неявный цикл, где p1 и p3 присваиваются значения, а потом при выполнении suspend эти значения p1 и p3 "выталкиваются" в поток и "потребляются" select'ом. Похоже устроены не-SQL табличные UDF (Java, C), но на SQL UDF это не эмулируется. Бедные граждане, которые воображают, будто знают SQL и умеют им пользоваться, но мышление которых на деле осталось Клипперным, ужасно страдают ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 12:19 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinВиноват. Должно быть: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Выходные параметры объявляются примерно так: Код: plaintext И все строки набора передадуться ? Или надо делать fetch после каждой строки ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 13:33 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
power-baaИ все строки набора передадуться ? Или надо делать fetch после каждой строки ? В последнем примере я привел два не связанных между собой примера. Первый - как работает цикл FOR в DB2. Второй - как работать с выходным параметром. Вы не вернете набор данных с помощью цикла FOR в DB2, как вы делали это в Interbase. Как это делать - смотрите самый первый мой ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 13:58 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein power-baaИ все строки набора передадуться ? Или надо делать fetch после каждой строки ? В последнем примере я привел два не связанных между собой примера. Первый - как работает цикл FOR в DB2. Второй - как работать с выходным параметром. Вы не вернете набор данных с помощью цикла FOR в DB2, как вы делали это в Interbase. Как это делать - смотрите самый первый мой ответ. В самом первом ответе вообще нет выходных параметров. Такую задачу я уже реализовывал. А тут набор возвращается через выходные параметры. Его тоже с помощью курсора возвращать ? не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 14:43 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
power-baaА тут набор возвращается через выходные параметры. Его тоже с помощью курсора возвращать ? не понимаю. Наборы данных не возвращаются в DB2 через параметры. Давайте с самого начала: что вам сделать-то надо, т.е. что вы хотите вернуть из процедуры? какие параметры приходят в процедуру (если есть)? Имейте ввиду, что вы не можете использовать процедуру в select команде, как в interbase. Процедура может вызываться только через команду CALL, а потом то, что ее вызвало может получить и обработать набор(ы) данных и выходные параметры, если все это возвращает процедура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 15:00 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Вот есть у меня такая процедура, которая отлично работает. Возвращает в явовский клиент набор строк. И вызывается эта процедура естественно через СALL CREATE PROCEDURE PD190439.BA_DEATH_PEN ( IN i_n_date DATE, IN i_k_date DATE ) DYNAMIC RESULT SETS 1 ------------------------------------------------------------------------ ------------------------------------------------------------------------ P1: BEGIN -- Объявить указатель DECLARE cursor1 CURSOR WITH RETURN FOR SELECT DEATH.FAMILY , DEATH.NAME_L , DEATH.FATHER , DEATH.D_ROGD , DEATH.D_SMER , DEATH.ADRES , DEATH.L_SCHET FROM DEATH AS DEATH WHERE DEATH.D_SMER >= BA_DEATH_PEN.i_n_date AND DEATH.D_SMER <= BA_DEATH_PEN.i_k_date; -- Указатель оставлен открытым для программы клиента OPEN cursor1; END P1 но не все процедуры так просты ! Не везде обойдёшься одним селектом, собрав туда все таблицы. Иногда приходится делать несколько селектов. В частности для повышения скорости. Как тогда результаты разных запросов свести в один набор данных и передать на клиента ? Тут, как я понял, нужно применять выходные параметры. Так ? Как же тогда вернуть все строки набора ? Через fetch ? Пробовал ставить - ругается ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 15:26 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
возвращать больее одного набора данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 15:29 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein Давайте с самого начала: что вам сделать-то надо, т.е. что вы хотите вернуть из процедуры? По-моему, с самого начала видно, что он хочет не процедуру, а табличную UDF, причём реализованную в стиле "хранимая процедура Interbase" (т.е. так, как в DB2 на SQL PL сделать просто невозможно, но и не нужно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 15:30 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
power-baa но не все процедуры так просты ! Не везде обойдёшься одним селектом, собрав туда все таблицы. Иногда приходится делать несколько селектов. В частности для повышения скорости. Как тогда результаты разных запросов свести в один набор данных и передать на клиента ? Вот как (по первому письму этого не видно)? А чем же плох банальный UNION ALL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 15:33 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Victor Metelitsa power-baa но не все процедуры так просты ! Не везде обойдёшься одним селектом, собрав туда все таблицы. Иногда приходится делать несколько селектов. В частности для повышения скорости. Как тогда результаты разных запросов свести в один набор данных и передать на клиента ? Вот как (по первому письму этого не видно)? А чем же плох банальный UNION ALL? Тем, что поля с разных запросов должны возвращаться в одной строке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 15:43 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
power-baa Victor Metelitsa power-baa но не все процедуры так просты ! Не везде обойдёшься одним селектом, собрав туда все таблицы. Иногда приходится делать несколько селектов. В частности для повышения скорости. Как тогда результаты разных запросов свести в один набор данных и передать на клиента ? Вот как (по первому письму этого не видно)? А чем же плох банальный UNION ALL? Тем, что поля с разных запросов должны возвращаться в одной строке Как :p1 и :p3 в примере наверху? Это вы таким путём скорость повышаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 15:46 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
[quot Victor Metelitsa Как :p1 и :p3 в примере наверху? Это вы таким путём скорость повышаете?[/quot] Наверху приведён примитивный пример, чтобы было понятно что я хочу. Когда for select в InterBase идет по куче больших таблиц, могут возникнуть сильные тормоза. Получение нескольких полей при этом селектами внутри цикла for select повышает скорость в разы и более. Проверено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 15:56 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
power-baaно не все процедуры так просты ! Не везде обойдёшься одним селектом, собрав туда все таблицы. Иногда приходится делать несколько селектов. В частности для повышения скорости. Как тогда результаты разных запросов свести в один набор данных и передать на клиента? Тут, как я понял, нужно применять выходные параметры. Так? Нет, не так. Тут уже две проблемы, я вижу: 1. передать более одного набора клиенту 2. реализовать сложную, или медленно работающую одним селектом логику. Для (1) уже советовали: возвращайте несколько наборов или объединяйте наборы (если они не слишком разнородны) оператором UNION ALL. Для (2) к вашим услугам global temporary tables для хранения промежуточных наборов данных (в сложных случаях именно их я и использую). Насобирав в них данные вы можете выдать наружу select на их основе, например. Всякие циклы я бы не советовал использовать без веских на то причин, т.к. решение на их основе очень часто (хотя и не всегда) медленне "групповой" обработки. Я их использую, только если по-другому - никак, например, надо вызвать SP для каждого значения поля, возвращаемого селектом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 15:56 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
power-baa Victor Metelitsa Как :p1 и :p3 в примере наверху? Это вы таким путём скорость повышаете? Наверху приведён примитивный пример, чтобы было понятно что я хочу. Когда for select в InterBase идет по куче больших таблиц, могут возникнуть сильные тормоза. Получение нескольких полей при этом селектами внутри цикла for select повышает скорость в разы и более. Проверено. Мне такое совершенно не приходило в голову - эмулировать join "вручную". Потому что, на мой вгляд, такой приём должен не только не ускорить, а даже затормозить, и тем сильнее, чем больше строк во внешнем цикле. В Interbase, наверное, с оптимизатором уж очень плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 16:46 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein power-baaно не все процедуры так просты ! Не везде обойдёшься одним селектом, собрав туда все таблицы. Иногда приходится делать несколько селектов. В частности для повышения скорости. Как тогда результаты разных запросов свести в один набор данных и передать на клиента? Тут, как я понял, нужно применять выходные параметры. Так? Нет, не так. Тут уже две проблемы, я вижу: 1. передать более одного набора клиенту 2. реализовать сложную, или медленно работающую одним селектом логику. Для (1) уже советовали: возвращайте несколько наборов или объединяйте наборы (если они не слишком разнородны) оператором UNION ALL. Для (2) к вашим услугам global temporary tables для хранения промежуточных наборов данных (в сложных случаях именно их я и использую). Насобирав в них данные вы можете выдать наружу select на их основе, например. Всякие циклы я бы не советовал использовать без веских на то причин, т.к. решение на их основе очень часто (хотя и не всегда) медленне "групповой" обработки. Я их использую, только если по-другому - никак, например, надо вызвать SP для каждого значения поля, возвращаемого селектом... А можно примерчик с использованием global temporary tables ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2006, 08:39 |
|
||
|
Хранимая п. DB2
|
|||
|---|---|---|---|
|
#18+
power-baaА можно примерчик с использованием global temporary tables ? Код: plaintext 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. user temporary tablespace (см. create tablespace команду). А вообще, если у вас есть постоянный доступ в интернет, запишите ссылочку: http://publib.boulder.ibm.com/infocenter/db2luw/v8//index.jsp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2006, 09:42 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=33802536&tid=1605276]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 223ms |
| total: | 377ms |

| 0 / 0 |
