Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
В хр. процедуре есть вх. параметры, естественно нужно получить набор данных (НД). Можно ли в where делать так или что то типа такого: вх: in_id, in_id2 авторselect t.* from table t where t.id=in_id and ( if in_id2 is null then t.id2 is null else t.id2=in_id2) Спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 06:15 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 10:10 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Alexey Popov Код: plaintext 1. 2. 3. См., например: Код: plaintext 1. 2. 3. coalesce(T.ID2, IN_ID2) IS NULL OR T.ID2 = IN_ID2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 11:26 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Алексей, первый вариант некорректен, потому что неопределенное значение не равно другому неопределенному значению; null не может быть чему либо равен, в том числе и другому null'у. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 11:38 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за помощь, я уже понял. Я так сделал: автор select * from table t where t.id1=i_id1 and COALEASCE(t.id2,0)=COALEASCE(i_id2,0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 11:43 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Теперь у меня проблема другая. Раньше я писал хрю процедуры на firebird, там как то легче было. Вообщем мне надо возвратить НД. авторCREATE PROCEDURE get_accounts_info ( INOUT io_id_estimate INTEGER, INOUT io_id_sestimate INTEGER, INOUT io_id_gr INTEGER, INOUT io_id_item INTEGER, INOUT io_id_sitem INTEGER, INOUT io_id_expense VARCHAR(5) ) SPECIFIC get_accounts_info DYNAMIC RESULT SETS 1 P1: BEGIN -- Объявить переменные DECLARE io_est_name VARCHAR(100) DEFAULT ''; DECLARE io_sest_name VARCHAR(100) DEFAULT ''; DECLARE io_gr_name VARCHAR(100) DEFAULT ''; DECLARE io_item_name VARCHAR(100) DEFAULT ''; DECLARE io_sitem_name VARCHAR(100) DEFAULT ''; DECLARE io_exp_name VARCHAR(100) DEFAULT ''; SELECT b.id_estimate, b.id_sestimate, b.id_gr, b.id_item, b.id_sitem, b.id_expense, e.est_name,se.sest_name,gr.gr_name,i.item_name,si.sitem_name,n.exp_name INTO io_id_estimate, io_id_sestimate, io_id_gr, io_id_item, io_id_sitem, io_id_expense, io_est_name,io_sest_name,io_gr_name,io_item_name,io_sitem_name,io_exp_name FROM budjet b join estimate e on e.id_estimate=b.id_estimate left join subestimate se on se.id_sestimate=b.id_sestimate join itemgroup gr on gr.id_gr=b.id_gr join itemekr i on i.id_item=b.id_item join subitemekr si on si.id_sitem=b.id_sitem join nexpense n on n.id_expense=b.id_expense WHERE b.id_estimate=io_id_estimate and COALESCE(b.id_sestimate,0)=COALESCE(io_id_sestimate,0) and COALESCE(b.id_gr,0)=COALESCE(io_id_gr,0) and COALESCE(b.id_item,0)=COALESCE(io_id_item,0) and COALESCE(b.id_sitem,0)=COALESCE(io_id_sitem,0) and COALESCE(b.id_expense,'')=COALESCE(io_id_expense,'') ORDER BY b.id_estimate; END P1 Не могу объяснить правильно... есть цикл автор for select * from table t into :id,:name,:prim do begin if (:id<100) then begin /*Тут что-нибудь делаешь с возвращаемыми параметрами*/ suspend;/*возврат результата*/ end end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 11:58 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
1) Декларируете возвращаемый курсор - например, С1 - это и будет возвращаемый набор данных declare C1 cursor with return for select * from TMP1 2) Декларируете временную таблицу - declare global temporary table TMP1 (...) - со структурой возвращаемого набора данных. 3) Заполняете ее чем хотите и как хотите (например, в цикле insert'ами) 4) В конце процедуры открываете курсор - open C1 - и оставляете его открытым. Цикл тоже по курсору: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Вместо loop может воспользоваться, например, while, как вам привычней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 12:48 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Я так сделал, но не получается. Процедура компилится без ошибок, но когда запускаешь, говорит: авторget_accounts_info - Информация запуска была изменена. DB2ADMIN.GET_ACCOUNTS_INFO - Выполнение запущено. Данные, возвращаемые в наборах результатов, ограничиваются первыми 100 строками. Данные, возвращаемые в столбцах наборов результатов, ограничиваются первыми 20 байтами (символами). DB2ADMIN.GET_ACCOUNTS_INFO - Исключительная ситуация при выполнении: Ошибка менеджера баз данных.[IBM][CLI Driver][DB2/NT] SQL0204N Имя "DB2ADMIN" не было определено. SQLSTATE=42704 DB2ADMIN.GET_ACCOUNTS_INFO - Откат успешно выполнен. DB2ADMIN.GET_ACCOUNTS_INFO - Ошибка выполнения. Сама процедура: авторCREATE PROCEDURE db2admin.get_accounts_info ( INOUT io_id_estimate INTEGER, INOUT io_id_sestimate INTEGER, INOUT io_id_gr INTEGER, INOUT io_id_item INTEGER, INOUT io_id_sitem INTEGER, INOUT io_id_expense VARCHAR(5) ) SPECIFIC db2admin.get_accounts_info DYNAMIC RESULT SETS 1 P1: BEGIN -- Объявить переменные DECLARE io_est_name VARCHAR(100) DEFAULT ''; DECLARE io_sest_name VARCHAR(100) DEFAULT ''; DECLARE io_gr_name VARCHAR(100) DEFAULT ''; DECLARE io_item_name VARCHAR(101) DEFAULT ''; DECLARE io_sitem_name VARCHAR(101) DEFAULT ''; DECLARE io_exp_name VARCHAR(101) DEFAULT ''; DECLARE rec_count INT DEFAULT 0; DECLARE cursor1 CURSOR WITH RETURN FOR SELECT b.id_estimate, b.id_sestimate, b.id_gr, b.id_item, b.id_sitem, b.id_expense, e.est_name,se.sest_name,gr.gr_name,i.item_name,si.sitem_name,n.exp_name FROM budjet b left join estimate e on e.id_estimate=b.id_estimate left join subestimate se on se.id_sestimate=b.id_sestimate left join itemgroup gr on gr.id_gr=b.id_gr left join itemekr i on i.id_item=b.id_item left join subitemekr si on si.id_sitem=b.id_sitem left join nexpense n on n.id_expense=b.id_expense WHERE b.id_estimate=io_id_estimate and COALESCE(b.id_sestimate,0)=COALESCE(io_id_sestimate,0) and COALESCE(b.id_gr,0)=COALESCE(io_id_gr,0) and COALESCE(b.id_item,0)=COALESCE(io_id_item,0) and COALESCE(b.id_sitem,0)=COALESCE(io_id_sitem,0) and COALESCE(b.id_expense,'')=COALESCE(io_id_expense,'') ORDER BY b.id_estimate; --Определение кол-ва записей SELECT count(b.id_estimate) INTO rec_count FROM budjet b WHERE b.id_estimate=io_id_estimate and COALESCE(b.id_sestimate,0)=COALESCE(io_id_sestimate,0) and COALESCE(b.id_gr,0)=COALESCE(io_id_gr,0) and COALESCE(b.id_item,0)=COALESCE(io_id_item,0) and COALESCE(b.id_sitem,0)=COALESCE(io_id_sitem,0) and COALESCE(b.id_expense,'')=COALESCE(io_id_expense,'') GROUP BY b.id_estimate; --################################################################# -- DECLARE GLOBAL TEMPORARY TABLE SESSION.get_accounts_info_gtt(io_id_estimate INTEGER, io_id_sestimate INTEGER, io_id_gr INTEGER, io_id_item INTEGER, io_id_sitem INTEGER, io_id_expense VARCHAR(5), io_est_name VARCHAR(100), io_sest_name VARCHAR(100), io_gr_name VARCHAR(100), io_item_name VARCHAR(100), io_sitem_name VARCHAR(100), io_exp_name VARCHAR(100)) WITH REPLACE IN db2admin; --################################################################# OPEN cursor1; WHILE rec_count>0 do FETCH cursor1 INTO io_id_estimate, io_id_sestimate, io_id_gr, io_id_item, io_id_sitem, io_id_expense, io_est_name,io_sest_name,io_gr_name,io_item_name,io_sitem_name,io_exp_name; INSERT INTO SESSION.get_accounts_info_gtt VALUES ( io_id_estimate, io_id_sestimate, io_id_gr, io_id_item, io_id_sitem, io_id_expense, io_est_name,io_sest_name,io_gr_name,io_item_name,io_sitem_name,io_exp_name); SET rec_count = rec_count - 1; END WHILE; CLOSE cursor1; END P1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 13:38 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Вы забыли пп. 1, 4. Добавьте: Код: plaintext 1. 2. Код: plaintext 1. cursor1 - рабочий, по нему вы проходитесь, что-то там делаете, закончили работу с ним - закрыли. А RETURNED_RECORDSET_1 - возвращается, причем открытым. курсору1 совершенно не обязательно быть with return, в отличие от RETURNED_RECORDSET_1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 13:59 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Roman PankovВы забыли пп. 1, 4. курсору1 совершенно не обязательно быть with return, в отличие от RETURNED_RECORDSET_1. А каким ему надо быть? Какие надо указать параметры при объявлении курсора? Вообще, если у Вас есть какая-нибудь инфа дайте ссылку или выложите! Спасибо, теперь не многа начал понимать sql db2! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2008, 07:43 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Николаха Roman PankovВы забыли пп. 1, 4. курсору1 совершенно не обязательно быть with return, в отличие от RETURNED_RECORDSET_1. А каким ему надо быть? Какие надо указать параметры при объявлении курсора? Вообще, если у Вас есть какая-нибудь инфа дайте ссылку или выложите! Спасибо, теперь не многа начал понимать sql db2! Ой, извиняюсь не заметил авторdeclare C2 cursor for select F1 from T1; Ещё раз Спасибо!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2008, 07:59 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Roman PankovВы забыли пп. 1, 4. Добавьте: Код: plaintext 1. 2. Код: plaintext 1. cursor1 - рабочий, по нему вы проходитесь, что-то там делаете, закончили работу с ним - закрыли. А RETURNED_RECORDSET_1 - возвращается, причем открытым. курсору1 совершенно не обязательно быть with return, в отличие от RETURNED_RECORDSET_1. Это я всё понял, но почему то процедура не компилится, говорит: авторDB2ADMIN.get_accounts_info - Построение запущено. При создании хранимая процедура возвращен -104. DB2ADMIN.get_accounts_info: 37: [IBM][CLI Driver][DB2/NT] SQL0104N Обнаружен неправильный элемент "<cursor declaration>" после текста "". Список правильных элементов: "<SQL statement>". LINE NUMBER=37. SQLSTATE=42601 DB2ADMIN.get_accounts_info - Построение завершилось неудачно. DB2ADMIN.get_accounts_info - Откат успешно выполнен. Вот сама процедура: Код: 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. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2008, 12:59 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Понял, просто заключил в BEGIN END. Всё компилируется, но когда запустишь возвращает: автор get_accounts_info - Информация запуска была изменена. DB2ADMIN.GET_ACCOUNTS_INFO - Выполнение запущено. Данные, возвращаемые в наборах результатов, ограничиваются первыми 100 строками. Данные, возвращаемые в столбцах наборов результатов, ограничиваются первыми 20 байтами (символами). DB2ADMIN.GET_ACCOUNTS_INFO - Исключительная ситуация при выполнении: Ошибка менеджера баз данных.[IBM][CLI Driver][DB2/NT] SQL0204N Имя "DB2ADMIN" не было определено. SQLSTATE=42704 DB2ADMIN.GET_ACCOUNTS_INFO - Откат успешно выполнен. DB2ADMIN.GET_ACCOUNTS_INFO - Ошибка выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2008, 13:49 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Николаха... --Объявить врем таблицу DECLARE GLOBAL TEMPORARY TABLE SESSION.GET_ACCOUNTS_INFO_GTT(io_id_estimate INTEGER, io_id_sestimate INTEGER, io_id_gr INTEGER, io_id_item INTEGER, io_id_sitem INTEGER, io_id_expense VARCHAR(5), io_est_name VARCHAR(100), io_sest_name VARCHAR(100), io_gr_name VARCHAR(100), io_item_name VARCHAR(100), io_sitem_name VARCHAR(100), io_exp_name VARCHAR(100)) WITH REPLACE IN db2admin; ...[/src]1. У вас есть user temporary tablespace с именем db2admin? 2. Это полный код процедуры? 3. Вы где-то после вызова процедуры используете временную таблицу? В смысле, зачем вы вставляете по 1 записи во временную таблицу, делаете на нее курсор для возврата, вместо того, чтобы просто возвращать cursor1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2008, 09:59 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein Николаха... --Объявить врем таблицу DECLARE GLOBAL TEMPORARY TABLE SESSION.GET_ACCOUNTS_INFO_GTT(io_id_estimate INTEGER, io_id_sestimate INTEGER, io_id_gr INTEGER, io_id_item INTEGER, io_id_sitem INTEGER, io_id_expense VARCHAR(5), io_est_name VARCHAR(100), io_sest_name VARCHAR(100), io_gr_name VARCHAR(100), io_item_name VARCHAR(100), io_sitem_name VARCHAR(100), io_exp_name VARCHAR(100)) WITH REPLACE IN db2admin; ...[/src]1. У вас есть user temporary tablespace с именем db2admin? 2. Это полный код процедуры? 3. Вы где-то после вызова процедуры используете временную таблицу? В смысле, зачем вы вставляете по 1 записи во временную таблицу, делаете на нее курсор для возврата, вместо того, чтобы просто возвращать cursor1? Это не полный тело цикла немнога вырезано. Спасибо, что откликнулись. Я уже понял почему. Надо было создать пользовательское пространство с именем db2admin и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2008, 10:35 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
to Mark Barinstein Почему выдаёт ошибку?? Код: plaintext 1. 2. 3. 4. 5. 6. Сама ошибка: автор[IBM][CLI Driver][DB2/NT] SQL0104N Обнаружен неправильный элемент "<cursor declaration>" после текста "". Список правильных элементов: "<SQL statement>". LINE NUMBER=50. SQLSTATE=42601 Если делаешь так, то нормально: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 05:04 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Николаха to Mark Barinstein Почему выдаёт ошибку?? Код: plaintext 1. 2. 3. 4. 5. 6. 1. variable declaration 2. declare cursor 3. sql procedure statement у вас же в этом примере : 1, 3, 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 09:57 |
|
||
|
Условия выбора where
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein Николаха to Mark Barinstein Почему выдаёт ошибку?? Код: plaintext 1. 2. 3. 4. 5. 6. 1. variable declaration 2. declare cursor 3. sql procedure statement у вас же в этом примере : 1, 3, 2. Спасибо, понял! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2008, 04:07 |
|
||
|
|

start [/forum/topic.php?fid=43&tid=1604030]: |
0ms |
get settings: |
6ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 374ms |

| 0 / 0 |
