|
Compound batch вообще возможен или только Stored Procedure ?
|
|||
---|---|---|---|
#18+
Есть таблица a(aid integer, atext varchar). В неи - 5 строк с данными. Необходимо получить 5 раз по 5 строк с такими же данными, но id должен быть на 2 больше, чем в исходных строках На такой код он непонятно ругается DECLARE cntr INTEGER DEFAULT 2 @ INSERT INTO a (AID, ATEXT) SELECT a.AID + cntr ,a.ATEXT FROM a FETCH FIRST 5 ROWS ONLY @ -------------------- DECLARE cntr INTEGER DEFAULT 2 DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0104N An unexpected token "2" was found following "CNTR INTEGER DEFAULT". Expected tokens may include: "END-OF-STATEMENT". SQLSTATE=42601 INSERT INTO HAYA_M000.ATEST (AID, ATEXT) SELECT HAYA_M000.ATEST.AID + cntr ,HAYA_M000.ATEST.ATEXT FROM HAYA_M000.ATEST FETCH FIRST 1 ROWS ONLY DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0206N "CNTR" is not valid in the context where it is used. SQLSTATE=42703 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2005, 14:52 |
|
Compound batch вообще возможен или только Stored Procedure ?
|
|||
---|---|---|---|
#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. 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.
Код: 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. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2005, 11:45 |
|
Compound batch вообще возможен или только Stored Procedure ?
|
|||
---|---|---|---|
#18+
------------>For gardenman : Огромное спасибо!!! Все получилось Вот только хотела запустить для 100 000 000 в одном цикле, а он сделал только 10 000 000. Я понимаю. Можно запустить еще 10 раз, но хочется понять, почему ? Даже SQL Server сделал все в одном цикле. Неужели DB2 не способна? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2005, 12:32 |
|
Compound batch вообще возможен или только Stored Procedure ?
|
|||
---|---|---|---|
#18+
между MS SQL и DB2 в обработке SQL выражений есть принципиальная разница. В DB2 все транзакции начинаются неявно с первого INSERT/DELETE/UPDATE оператора. У MS SQL, если не ставить явно begin transaction - каждый оператор - атомарен. Т.е. опрератор работает в одной транзакции. Транзакция началась и закончилась. Когда вы делаете begin atomic....end - вы все ограничиваете одной транзакцией. Commit внутри этого болка не допускается. Поэтому 1) Кол-во блокировок на строки может превысить допустимый предел или пойдет эскалация. Чтобы этого не было можно явно сделать lock table in exlusive mode . 2) лог может переполниться. Поэтому либо сделайте огромный лог (есть вариант с беконечным логом) либо делайте много транзакций вменяемого размера. 3) Пишите процедуру, внутри процедуры вы можете явно говорить commit после, допустим, каждой тысячи записей. Или, в конце-концов запускаете в параллель несколько процедур генерации из нескольких сессий а id раздавайте через sequence или identity, чтоб не было нахлестов в первичном ключе. (лучше sequence). Коль у вы генерите 100 млн. записей, то полагаю машина у вас не слабая. Вариант c "бесконечным" логом вам вполне подойдет. Запустите несколько сессий генерации, а в какой-нить одной сессии можете наблюдать скоко вставилось рекордов (с помощью грязного чтения): select count(*) from <you table> with ur или посмотрев на значение sequence. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2005, 15:08 |
|
Compound batch вообще возможен или только Stored Procedure ?
|
|||
---|---|---|---|
#18+
gardenmanмежду MS SQL и DB2 в обработке SQL выражений есть принципиальная разница. В DB2 все транзакции начинаются неявно с первого INSERT/DELETE/UPDATE оператора. У MS SQL, если не ставить явно begin transaction - каждый оператор - атомарен. Т.е. опрератор работает в одной транзакции. Транзакция началась и закончилась. Когда вы делаете begin atomic....end - вы все ограничиваете одной транзакцией. Commit внутри этого болка не допускается. Поэтому 1) Кол-во блокировок на строки может превысить допустимый предел или пойдет эскалация. Чтобы этого не было можно явно сделать lock table in exlusive mode . 2) лог может переполниться. Поэтому либо сделайте огромный лог (есть вариант с беконечным логом) либо делайте много транзакций вменяемого размера. 3) Пишите процедуру, внутри процедуры вы можете явно говорить commit после, допустим, каждой тысячи записей. Или, в конце-концов запускаете в параллель несколько процедур генерации из нескольких сессий а id раздавайте через sequence или identity, чтоб не было нахлестов в первичном ключе. (лучше sequence). Коль у вы генерите 100 млн. записей, то полагаю машина у вас не слабая. Вариант c "бесконечным" логом вам вполне подойдет. Запустите несколько сессий генерации, а в какой-нить одной сессии можете наблюдать скоко вставилось рекордов (с помощью грязного чтения): select count(*) from <you table> with ur или посмотрев на значение sequence. -------------------------------- Вариант c "бесконечным" логом вам вполне подойдет Ну вот, все свалилось. LOG переполнен, транзакция откатилась. Как сначала посмотреть характеристики LOGa- постоянные или динамические (т.е. может ли увеличиваться до бесконечности) ? Подскажите, как установить LOG, чтобы рос до бесконечности? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2005, 10:17 |
|
|
start [/forum/moderation_log.php?user_name=DB2+%D0%9D%D0%BE%D0%B2%D0%B8%D1%87%D0%BE%D0%BA]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 895ms |
total: | 1067ms |
0 / 0 |