Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Добрый день - несколько часов уже пытаюсь решить следующую задачку. Дано - массив со строками, допустим имена штатов. Нужно пробежаться по ним и вставить данные в пару таблиц. В Оракле для этих целей сгодится безымянный PL SQL блок, т.е. запускаем sqlplus и пошел Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. и готово. Как мне можно в DB2 не используя функции/процедуры, однократно выполнить нечто подобное. Пробовал: Код: plsql 1. 2. 3. 4. 5. 6. 7. Выдает кучу ошибок, в том числе и вот такое SQL0104N An unexpected token "FOR" was found following "END ". Expected ... Подскажите, в каком направлении искать? PS. PL/SQL версию от DB2 не предлагать, надо на SQL PL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 04:10 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Kostya Ilyinov, Здравствуйте. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Не забудьте установить символ завершения команды в '@' вместо ';', который по-умолчанию. Полезно почитать также про SQL Procedural Language (SQL PL) . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 10:09 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Спасибо - попробовал. Пока не получается. Вот моя версия - так что может дело еще в этом: Код: plaintext 1. 2. 3. 4. 5. 6. Выхлоп ниже: Код: 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. Не похоже на то, что ему нравится даже самое начало. Пробовал Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. Запускаю так: Код: plaintext Также пробовал Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. Теперь ругается на SERVEROUTPUT: Код: plaintext 1. 2. 3. 4. ну и дальше прежние ошибки. Марк, спасибо - почитал про мою версию SQL PL, вроде все должно работать. Я правильно понимаю, что эта структура называется Inline Compound Statement? Может есть какие-то ограничения по использованию циклов? Но я ведь видел пример, собственно из которого и делал свой блок: Код: plsql 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. http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.sql.ref.doc/doc/r0004240.html?Open Там опять же 9.7, но по идее должно работать и в 9.5? Прошу прощения у профессионалов за такой дилетантский вопрос, просто уже нет мочи переводить простыни кодов ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 04:03 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Kostya Ilyinov, Не надо использовать файл с командами в таком виде: db2 < test.sql В 9.5 нет команды set serveroutput, модуля dbms_output, compiled compound запросов. Там есть Compound SQL (Dynamic) statement . Когда вы используете эти запросы, вы должны изменить символ разделитель запросов. Т.е. вместо db2 -tf test.sql где по-умолчанию используется символ-разделитель команд ';', можно использовать символ '@', например: db2 -td@ -f test.sql test.sql Код: 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. В вашем случае вместо этого compound с циклом можно было бы: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:14 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Спасибо за ответ - завтра буду пробовать снова. Приведенный код (работающий) - это пример, мне же нужно циклом пробежаться по массиву строк и вставить данные в 2-3 таблицы. Можно конечно сначала это все вставить во временную таблицу наверно, но этот подход мне видится костыльным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:47 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Kostya Ilyinov Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. А точно нужно использовать подобные конструкции? Не достаточно ли Код: sql 1. 2. Andy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 17:02 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Kostya IlyinovПриведенный код (работающий) - это пример, мне же нужно циклом пробежаться по массиву строк и вставить данные в 2-3 таблицы. Можно конечно сначала это все вставить во временную таблицу наверно, но этот подход мне видится костыльным.Это только на тестах можно определить, как оно быстрее будет. Обычно групповая обработка записей идёт быстрее обработки в цикле, но бывают исключения. Можно и одной командой в несколько таблиц изменения делать без временных таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 18:58 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Можно наверняка. Но мне хочется избежать дублирования данных. Я хочу определить массив с именами штатов/страной, и массив с типом объекта (штат/страна). И в цикле пробежаться по массиву (любому, они имеют одинаковую длину по определению) и вставить строки в соотв. таблицы. Как такое сделать не прибегая к какому-либо хранилищу, будь то массив или таблица, и не дублируя значения в операциях вставки, я пока не представляю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2012, 03:23 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
A.Panskikh, Коллеги, я наверно сбил вас с толку публикацией примера с Код: plsql 1. . Я лишь демонстрировал что я пробовал, и как оно схоже по конструкции с моей задачей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2012, 03:25 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Kostya IlyinovЯ лишь демонстрировал что я пробовал, и как оно схоже по конструкции с моей задачей. Собственно и я о том же. Мы работаем с базой и нужно перестроить мозг на решение задач иными, непрограммистскими, методами. Много хороших примеров можно почерпнуть из DB2 SQL Cookbook. Andy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2012, 10:43 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Kostya IlyinovНо мне хочется избежать дублирования данных. Я хочу определить массив с именами штатов/страной, и массив с типом объекта (штат/страна). И в цикле пробежаться по массиву (любому, они имеют одинаковую длину по определению) и вставить строки в соотв. таблицы. Как такое сделать не прибегая к какому-либо хранилищу, будь то массив или таблица, и не дублируя значения в операциях вставки, я пока не представляю.Только сейчас заметил, что мой пример неправильный был - вы вставляете в 2 разные таблицы по условию. Но смысл остаётся тот же, так рекомендуют во многих СУБД делать - если можно обойтись без процедурного языка, то как правило, лучше обойтись чистым SQL. В данном случае не надо бояться сделать 2 insert select из одной и той же таблицы, но с разными условиями - как правило массовая вставка будет идти быстрее, чем одиночные вставки, хотя и базовая таблица будет сканироваться 2-жды. На небольшом количестве записей это всё равно, но на значительных объёмах данных вы, скорее всего, увидите разницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2012, 10:47 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Спасибо, буду делать через промежуточную таблицу. Немного оффтопика: а есть ли тут полиглоты DB2/Oracle - мне одному кажется, что в Oracle PL/SQL все это гораздо проще? Не пойму, то ли привык к документации оракловской с детальными описаниями и примерами, то ли концептуально языки так отличаются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2012, 11:01 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Kostya IlyinovMark Barinstein, Спасибо, буду делать через промежуточную таблицу. Немного оффтопика: а есть ли тут полиглоты DB2/Oracle - мне одному кажется, что в Oracle PL/SQL все это гораздо проще? Не пойму, то ли привык к документации оракловской с детальными описаниями и примерами, то ли концептуально языки так отличаются? На мой взгляд процедурные языки у db2 и oracle по легкости освоения примерно одинаковы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2012, 15:12 |
|
||
|
DB2 CLP и SQL PL
|
|||
|---|---|---|---|
|
#18+
Kostya Ilyinov полиглоты DB2/Oracle - [...] концептуально языки так отличаются? Есть у IBM Oracle to DB2 Conversion Guide: Compatibility Made Easy (redbook, SG24-7736) - должен помочь в переходе между системами. Где-то мне попадался гайд с названием типа DB2 for Oracle DBA, можно погуглить. Andy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2012, 17:06 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=37914200&tid=1601752]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 269ms |
| total: | 417ms |

| 0 / 0 |
