Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / IBM DB2, WebSphere, IMS, U2, etc |
![]() ![]() |
PeterG Member Откуда: Сообщений: 39 |
Возможно ли в DB2 ver.7 в одном SQL стейтменте выполнять более одного SQL оператора?
Например, в MS SQL можно в ADO Command написать INSERT INTO Table1 (Col1) VALUES ('1') INSERT INTO Table1 (Col1) VALUES ('2') INSERT INTO Table1 (Col1) VALUES ('3') и выполнить это как один стейтмент. В результате будут вставлены 3 строки. Если же эту строку попытаться выполнить в DB2, то получаем ошибку [DB2/NT] SQL0104N An unexpected token "(0) INSERT INTO Table1 (ID) VALUES" was found following "O TABLE1 (ID) VALUES". Expected tokens may include: "<space>". SQLSTATE=42601 Возможно ли в DB2 выполнение нескольких SQL инструкций в одном стейтменте? Может быть, их нужно разделять каким-нибудь специальным сеператором (как "!" в Interbase)? Заранее благодарен |
21 ноя 02, 16:24 [79996] Ответить | Цитировать Сообщить модератору |
gardenman Member Откуда: С-Петербург Сообщений: 2347 |
Эта штука называется COMPOUND SQL |
21 ноя 02, 16:49 [80020] Ответить | Цитировать Сообщить модератору |
PeterG Member Откуда: Сообщений: 39 |
Спасибо. В Help'e про Compound SQL сказано следующее: This statement can only be embedded in an application program.
Т.е., если я правильно понял, нельзя написать BEGIN COMPOUND INSERT INTO Table1 (ID) VALUES (0) INTO Table1 (ID) VALUES (1) END COMPOUND и отправить (например, через ADO Command) на сервер. Так ли это? Или я ошибся в синтаксисе? |
22 ноя 02, 10:02 [80321] Ответить | Цитировать Сообщить модератору |
gardenman Member Откуда: С-Петербург Сообщений: 2347 |
Ах, через ADO!... естественно такая фишка не пройдет.
DB2 нет своего процедурного языка. Даже в 7 версии то, что пишется полностью на SQL на самом деле на сервере транслируется в C- программу, а затем компилируется обычным компилятором. Разработка на DB2 имеет свою специфику. Для вашего случая лучше написать сохраненную процедуру. Но если тебе просто нужно лишь вставлять данные то делай так: INSERT INTO T1 (F1,F2,F3) VALUES ('v1','V2','v3'), ('v1','V2','v3'), ('v1','V2','v3'), ('v1','V2','v3'),... и т.д...вот тебе все и вставицца |
22 ноя 02, 11:08 [80378] Ответить | Цитировать Сообщить модератору |
gardenman Member Откуда: С-Петербург Сообщений: 2347 |
т.е данные каждойя новой строки в круглых скобочках, а скобочки - через запятую)) Удачи!... |
22 ноя 02, 11:10 [80380] Ответить | Цитировать Сообщить модератору |
Victor Metelitsa Member Откуда: Тюмень Сообщений: 2551 |
BEGIN ATOMIC
список выражений через ';' END вполне себе работает через CLI (и, наверное, ODBC; чуть-чуть иной синтаксис для Embedded) полезно, например, если INSERT'ы в разные таблицы одной пачкой. |
20 янв 03, 13:52 [109922] Ответить | Цитировать Сообщить модератору |
Victor Metelitsa Member Откуда: Тюмень Сообщений: 2551 |
Имелазь в виду DB2 UDB v7.2; не уверен насчет более ранних. |
20 янв 03, 13:53 [109923] Ответить | Цитировать Сообщить модератору |
Gena G. Member Откуда: Oz Сообщений: 977 |
Такое помнится было с версии 5й(?) |
21 янв 03, 01:16 [110564] Ответить | Цитировать Сообщить модератору |
Все форумы / IBM DB2, WebSphere, IMS, U2, etc | ![]() |