|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
Задача вкратце такова: Имеется DB2/400 V5R2. Нужно реализовать некий атомарный апдейт нескольких таблиц внутри библиотеки (базы). Т.е. имеется куча insert'ов, update'ов и т.д. - нужно, чтобы они либо все завершились, либо все не завершились, в случае ошибки в одном из запросов. В TSQL я бы наваячил скрипт типа: BEGIN TRAN -- ... здесь insert'ы/update'ы, анализ @@ERROR, ROLLBACK, в случае если не 0 (в нужных случаях) COMMIT КАК(???) то же самое сделать в DB2/400? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2004, 18:56 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
В DB2 транзакция начинается неявно... нет оператора BEGIN TRANSACTION зото есть SAVEPOINT и COMMIT WORK Но с AS-кой работать не доводилось. Если вы коннектитесь к ней с какой-нить машины (с виндузов, линуксов, юниксов) через CLP то уберите автокоммит: db2 -c- ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2004, 19:08 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#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.
из головы вылетело. еще поспотри комаду strcmtctl. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2004, 20:10 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
gardenmanВ DB2 транзакция начинается неявно... нет оператора BEGIN TRANSACTION зото есть SAVEPOINT и COMMIT WORK Но с AS-кой работать не доводилось. Если вы коннектитесь к ней с какой-нить машины (с виндузов, линуксов, юниксов) через CLP то уберите автокоммит: db2 -c- Хмм... Нужно посмотреть... Но чего-то не помню я такой косточки Да я нашел в хелпе Commit и Rollback, но 1. Не нашел, как оформить в несколько запросов в пакет (можно через ; а как управлять выполнением скрипта?) 2. Как проанализировать состояние выполнения запроса? 3. Как ее, транзакцию, начать?? NewYear, в принципе, я собираюсь пускать этот запрос не с зеленого экрана, а по ODBC. Поэтому нужен текст не на CL, а в виде SQL скрипта, если это возможно. Либо каким другим способом, (SP написать???), но чтобы это действие можно было запустить по ODBC. Я слишком привык к TSQL и мыслю его категориями... Народ, киньте пример... Задача разовая, и, в принципе несложная, но уже 2 дня убил и нифига :( ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2004, 20:39 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
причем CL? RUNSQLSTM запускает SQL скрипт. не нравится зеленый экран -- дело ваше. через ODBC см. ответ gardenman. >2. Как проанализировать состояние выполнения запроса? в скрипте??? посмотреть в лог. если необходимо, откатите все изменения. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2004, 21:00 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
uagg gardenmanВ DB2 транзакция начинается неявно... нет оператора BEGIN TRANSACTION зото есть SAVEPOINT и COMMIT WORK Но с AS-кой работать не доводилось. Если вы коннектитесь к ней с какой-нить машины (с виндузов, линуксов, юниксов) через CLP то уберите автокоммит: db2 -c- Хмм... Нужно посмотреть... Но чего-то не помню я такой косточки Да я нашел в хелпе Commit и Rollback, но 1. Не нашел, как оформить в несколько запросов в пакет (можно через ; а как управлять выполнением скрипта?) 2. Как проанализировать состояние выполнения запроса? 3. Как ее, транзакцию, начать?? NewYear, в принципе, я собираюсь пускать этот запрос не с зеленого экрана, а по ODBC. Поэтому нужен текст не на CL, а в виде SQL скрипта, если это возможно. Либо каким другим способом, (SP написать???), но чтобы это действие можно было запустить по ODBC. Я слишком привык к TSQL и мыслю его категориями... Народ, киньте пример... Задача разовая, и, в принципе несложная, но уже 2 дня убил и нифига :( У DB2 есть две похожие вещи - это хранимые процедуры и COMPOUND SQL: Для качественного выполнения скрипта неплохо было бы задать разделитель между выражениями. У меня это сделано так: В Far Manager для файлов *.sql прописал такую вещь: Код: plaintext 1.
db2 -z myfile.log -td@ -v -f myfile.sql где @ - разделитель между командами myfile.sql - файл со скриптом myfile.log - результат выполнения соорудите скрипт в таком виде: Код: 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.
результат: Код: 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. 92. 93. 94. 95. 96.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2004, 10:16 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
Еще рекомендую посмотреть такую фичу как SELECT (DML), правда не знаю у вас на AS/400 она подерживается или нет. Полезная фича. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2004, 10:18 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
вроде не аэске нет begin ATOMIC. что-то похожее есть , можно запустить транзакцию внутри новой или именованной ACTIVATION GROUP (OS/400 фича) впрочем, не помню. Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2004, 20:07 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
Хмм... Нашел несколько интересных вещей. Во-первых, на AS/400 до тех пор, пока не включено журналирование на соответствующей схеме (это там так БД называются) - никаких транзакций не будет. Даже операции insert/update множества записей, похоже, не атомарны. Команда (CL, с зеленого экрана) crtlib никакой схемы журналирования не предусматривает, и, соответственно, транзакций нету. Вообще. (Поэтому мне не удалось получить нужного эффекта методом прямого изнасилования, выполнив методы begintran, commit/rollback объекта ADO.Connection). А если создать БД с помощью SQL скрипта (create database или create shema) - БД создаётся с подключенной системой журналирования, и всё начинает работать изЮмительно. Это раз, как говориться. Во-вторых, в DB2/400 версии v5 произошли радикальные изменения в сравнении с v4. Появился скриптовый SQL очень похожий на TSQL, и где-то даже более логичный (тем не менее требующий с непривычки диких усилий). Например - можно создавать на скриптовом SQL UDF, возвращающие таблицы. Но я полдня убил, прежде чем понял, как использовать их в запросе. [где то с 10-го раза увидел, что в описание синтаксиса команды одно из слов не стоит в скобкак, т.е. является обизательным модификатором. Т.е. Select * from ( table (myUDF(1,2))) as a ] В-третьих DB2 UDB и DB2/400 - вещи, которые похожи разве что названием. Это я понял, когда пытался применить хелп одного к другому. И atomic там нету :( В-четвертых, как начинать транзакцию явно внутри скрипта так и не нашел, так что вопрос по прежнему актуален. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2004, 22:27 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
вот Нарыл что-то: http://www.redbooks.ibm.com/redbooks/SG246503/wwhelp/wwhimpl/java/html/wwhelp.htm http://www.redbooks.ibm.com/redbooks/SG246503/15-39.htm#wp490913 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2004, 10:23 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
http://www.redbooks.ibm.com/redbooks/pdfs/sg246503.pdf Как раз про вашу версию ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2004, 10:32 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
>Команда (CL, с зеленого экрана) crtlib никакой схемы журналирования не предусматривает, и, соответственно, транзакций нету. Вообще. тогда нужно еще 3 команды ввести с зеленого экрана: crtjrnrcvr, crtjrn, strjrnpf транзакцию явно открывать внутри скрипта не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2004, 18:56 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
>транзакцию явно открывать внутри скрипта не нужно. если с зеленого экрана в runsqlstm нужно указать параметр COMMIT отличный от *NONE, или можно предварительно запустить команду strcmtstl ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2004, 19:02 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
>это там так БД называются это там schema DB2 for Workstarion так называется. термин DB2/400 -- 'collection' c помощья sql создается 'create collection' ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2004, 19:12 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
Thnks, gardenman. Будем посмотрять. Самое обидное, что теоретически вся сопутствующая документация есть. Однако, с какой стороны ее обкусывать... Блин... BOL просто на порядок удобнее и вразумительнее. Хотя и не так мелочно-подробна. NewYearТогда нужно еще 3 команды ввести с зеленого экрана: crtjrnrcvr, crtjrn, strjrnpf. Угу. Я это нашел. Однако проще SQL Create Database, а потом настроить параметры вручную в ON мышкой :-) NewYear>транзакцию явно открывать внутри скрипта не нужно. если с зеленого экрана в runsqlstm нужно указать параметр COMMIT отличный от *NONE, или можно предварительно запустить команду strcmtstl Да, это тоже понял. Только AS/400 там в "серверном" варианте, запускать запросы с зеленого экрана нельзя. (Т.е. можно, но сразу запускается паразитное задание отжирающее 90% процессора). Впрочем, задача в любом случае не в этом. NewYear>это там так БД называются это там schema DB2 for Workstarion так называется. термин DB2/400 -- 'collection' c помощья sql создается 'create collection' Не-а. Насколько я понял, в V5 уже переиграли. По крайней мере 'create collection' не срабатывает. Впрочем Create Database нормально срабатывало всегда. Спасибо! :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2004, 21:15 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2004, 21:44 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
А версия какая? То, что эта штука работала на V4r5, к примеру, я в курсе :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2004, 23:25 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
Впрочем, может я collection с ошибкой набрал, и не стал разбираться. Но Create Shema и Create Database - точно работает. И, самое главное - когда в Навигаторе заказываешь скрипт библиотеки - она генерит базу как Create Shema. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2004, 23:28 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
PS: И в доке по SQL v5r2 create collection уже нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2004, 23:29 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
вроде 5.2. я так говорю потому что давно не слежу что тут на аэске. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2004, 20:01 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
не. это 5.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2004, 20:08 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
не, это не так делается. может, завтра вспомню ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2004, 20:22 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
А с винды достучаться можна до DB2/400 V5R2 ? Извиняйте за глупый вопрос . ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2004, 10:07 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
Для этого нужно установить DB2 Connect ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2004, 10:38 |
|
Help!! Как реализовать тразакцию в SQL скрипте для DB2/400?
|
|||
---|---|---|---|
#18+
Я к чему веду , я некада неработал с DB2/400 , ну если к ней можно достучаться исползуя db2cli.dll, а также исполюзуя dbexpdb2.dll - это библиотека с копонент dbExpres прямого доступак БД IBM ДБ2 , то я пишу прогу "DB2 Commander" , у нее на текущую версию имеется: 1. Редактор запросов - SQL Editor 2. Построитель запросов - SQL Builder 3. Редактор скриптов - Script Editor 4. Менеджер связей - Ели кто работал с IBExpert . эт чете похожее и я написал. Используя ее можно с лехкостю решить проблему описаную в даной теме. Текущая версия DB2 Commander v1.0.4.1 , нормально работает под IBM ДБ2 в8.1 и ОС ХР Ели кто заинтересовался то пишите ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2004, 11:39 |
|
|
start [/forum/topic.php?fid=43&msg=32812834&tid=1606078]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 425ms |
0 / 0 |