|
|
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток! Помогите пожалуйста новичку Имею следующее: PB9 + ASE12.5 (подключение через odbc) Делаю следующее: Declare Cur_1 Cursor for Select taba_1.B_tab_1, taba_2.B_tab_2 from taba_1 inner join taba_2 on taba_1.A_tab_1 = taba_2.A_tab_2; String result1 String result2 Integer iid iid=0 open Cur_1; Do While SQLCA.sqlcode=0 iid++ Fetch Cur_1 Into :result1, :result2; Insert Into taba_3 (id,aa,bb) values (:iid, :result1, :result2); Loop Close Cur_1; Как бы все просто, но вот незадачки выходят: В результирующей таблице taba_3 я вижу в одном случае не все значения, многие пропущены (из 11927 записей только 1974) зы- 1974 число постоянное. В результирующей таблице taba_3 я вижу в другом случае наоборот, заносятся все нужные записи (118), а затем в бесконечном цикле дублируется последняя запись. Где же косячки вылазят? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 12:04 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
сори, там не то чтобы пропущенных много, а просто заносятся первые 1974 записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 12:08 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Imperous Do While SQLCA.sqlcode=0 iid++ Fetch Cur_1 Into :result1, :result2; Insert Into taba_3 (id,aa,bb) values (:iid, :result1, :result2); Loop Close Cur_1; Как бы все просто, но вот незадачки выходят: В результирующей таблице taba_3 я вижу в одном случае не все значения, многие пропущены (из 11927 записей только 1974) зы- 1974 число постоянное. В результирующей таблице taba_3 я вижу в другом случае наоборот, заносятся все нужные записи (118), а затем в бесконечном цикле дублируется последняя запись. Где же косячки вылазят? insert во "другом" случае сбрасывает SQLCode в 0 поэтому происходит бесконечный цикл. Что есть первый случай? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 12:17 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
а как этот сброс в ноль избежать? второй случай это такая же выборка только из других таблиц и инсерт. т.е. делаю один курсор Кур_1 заношу значения, закрываю курсор, затем делаю Кур_2 и опять заношу значения и опять закрываю, все это в одном событии по нажатии кнопки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 12:23 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Imperous wrote: > Помогите пожалуйста новичку Не думаю, что тебе что-то поможет. > Имею следующее: PB9 + ASE12.5 (подключение через odbc) > Делаю следующее: А INSERT INTO taba_3 (SELECT ... ) уже отменили ;)? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 12:27 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Dim2000 Imperous wrote: > Помогите пожалуйста новичку Не думаю, что тебе что-то поможет. > Имею следующее: PB9 + ASE12.5 (подключение через odbc) > Делаю следующее: А INSERT INTO taba_3 (SELECT ... ) уже отменили ;)? Posted via ActualForum NNTP Server 1.4 не то чтобы отменили, но мне надо вставить в первое поле свои значения, а в остальные два занести результаты селекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 12:32 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Imperousа как этот сброс в ноль избежать? Сохранить результат SQLCode после FETCH в переменной и проверять ее в цикле. Imperousвторой случай это такая же выборка только из других таблиц и инсерт. т.е. делаю один курсор Кур_1 заношу значения, закрываю курсор, затем делаю Кур_2 и опять заношу значения и опять закрываю, все это в одном событии по нажатии кнопки Ниасилил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 12:32 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
конечно можно и насильно если знать количество строк в результирующем наборе, но мне кажется что это не лучший выход... хотя спасибо и на том ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 12:47 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Imperousконечно можно и насильно если знать количество строк в результирующем наборе, но мне кажется что это не лучший выход... хотя спасибо и на том Гы. Я говорю что из Вашего объяснения по второму случаю (который в первом посте Вы называете "в одном случае") нихрена не понятно. Наверное в кур_2 тоже какая-то ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 13:22 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
ИМХО вот наиболее стандартный цикл для работы с курсором Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 13:28 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Вот такой текст, думаю так будет понятней: Declare Cur_1 Cursor for Select taba_1.B_tab_1, taba_2.B_tab_2 from taba_1 inner join taba_2 on taba_1.A_tab_1 = taba_2.A_tab_2; String result1 String result2 Integer iid iid=0 open Cur_1; Do While SQLCA.sqlcode=0 iid++ Fetch Cur_1 Into :result1, :result2; Insert Into taba_3 (id,aa,bb) values (:iid, :result1, :result2); Loop Close Cur_1; Declare Cur_2 Cursor for Select taba_4.B_tab_4, taba_5.B_tab_5 from taba_4 inner join taba_5 on taba_4.A_tab_1 = taba_5.A_tab_2; open Cur_2; Do While SQLCA.sqlcode=0 iid++ Fetch Cur_2 Into :result1, :result2; Insert Into taba_3 (id,aa,bb) values (:iid, :result1, :result2); Loop Close Cur_2; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 13:35 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
с новым годомИМХО вот наиболее стандартный цикл для работы с курсором Ну и что с этого куска кода-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 13:36 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
автору: как начинающему, сразу посоветую отказаться от embedded курсоров. порочная практика, ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 14:00 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
а как же тогда быть, куда смотреть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 14:06 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Imperousа как же тогда быть, куда смотреть? либо в сторону хранимых процедур, либо в сторону datawindow (datastore). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 14:08 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Imperousа как же тогда быть, куда смотреть? datastore ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 14:09 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
ImperousВот такой текст, думаю так будет понятней: И что, прямо вот в первом случае вставляет 1974 записи, а во втором - зацикливается. Что-то как-то не верится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 14:22 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Локшин Марк с новым годомИМХО вот наиболее стандартный цикл для работы с курсором Ну и что с этого куска кода-то? а то что: INSERT может породить ошибку и курсор тут-же вывалится. (это по поводу 1974) и как уже было сказано INSERT очищает значение SQLCA.SQLCODE полученное после FETCH - имеем бесконечный цикл. что написали - так и работает. для начала перепиши цикл и сделай обработку ошибки после ИНСЕРТа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 14:44 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Транзакцию для инсерта надо другую использовать Вообще embedded sql в программе (особенно курсоры) не есть гуд ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 15:03 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
с новым годом Локшин Марк с новым годомИМХО вот наиболее стандартный цикл для работы с курсором Ну и что с этого куска кода-то? а то что: INSERT может породить ошибку и курсор тут-же вывалится. (это по поводу 1974) и как уже было сказано INSERT очищает значение SQLCA.SQLCODE полученное после FETCH - имеем бесконечный цикл. что написали - так и работает. для начала перепиши цикл и сделай обработку ошибки после ИНСЕРТа. А зачем это делать МНЕ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 15:15 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
:) эт я с горяча 2 Imperous для начала перепиши цикл и сделай обработку ошибки после ИНСЕРТа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 16:00 |
|
||
|
PB9 + ASE12.5 cursor/open/do_while/fetch/insert/loop/close
|
|||
|---|---|---|---|
|
#18+
Код конечно не фонтан Но если очень хочеться через курсор тогда так Код: 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. Я бы за использование курсоров не в процедурах - "пристреливал" Использовать их имея datawindow - просто изврат ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2008, 16:48 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=35356205&tid=1336651]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 16ms |
| total: | 170ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...