![]() |
|
Модераторы: Akella |
![]()
|
|
| Kaser |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.4.2003 Репутация: нет Всего: нет |
СУБД - IBM DB2. Требуется составить запрос на вставку в таблицу, если таких значений в ней нет - вроде
IF NOT (EXISTS(SELECT * from table1 where field_1='value')) THEN INSERT INTO table1(field_1) VALUES ('value') END IF; Создавать процедуры не могу. А как оформить SQL-запросом - не знаю. Это вообще возможно? |
|||
|
||||
| Nobody |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 25.8.2003 Где: Россия, Москва Репутация: нет Всего: 16 |
А нельзя сказать, что это поле UNIQUE (сорри, не знаю, как именно это выглядит в DB2) и тупо проинсёртить всё подряд. Тогда на те значения, которые уже есть, просто вывалится ошибка и всё.
-------------------- |
|||
|
||||
| jonik_Dk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 18.2.2004 Репутация: нет Всего: 1 |
Сделай процедуру не поленись, изучи!!! Одним запросом вряд ли сделаешь. Можно так, но это вряд ли тебе подойдет: SELECT field_1 from table1 where field_1='value' INTO TEMP a; INSERT INTO table1(field_1) Select a.field_1 from a |
|||
|
||||
| Kaser |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.4.2003 Репутация: нет Всего: нет |
To Nobody:
Поясняю: это поле и так UNIQUE, а делается это как раз для того, чтобы избавить себя от ловли этих ошибок(а пока сделано, как уважаемый Nobody и описал) To jonik_Dk:
Я не ленивый. Просто DB2 - та, которая стоит в ЦИТе (смешная контора, где приходится работать) то ли не настроена, то ли что не поставлено, но на всякие попытки создать процедуру ругается "чего-то там не найдено". Причем товарищ старший админ эту проблему не решил. Вешал это дело на триггер на вставку, но мне это требуется не всегда, а включать / отключать триггеры - дело не благодарное. |
|||
|
||||
| jonik_Dk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 18.2.2004 Репутация: нет Всего: 1 |
Чем пользуешься Delphi или еще что то?
|
|||
|
||||
| Kaser |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.4.2003 Репутация: нет Всего: нет |
Пользую CBuilder5.0
Добавлено @ 08:21 Да,
не проходит - пытается вставить NULL-значения (когда ничего не нужно) |
|||
|
||||
| jonik_Dk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 18.2.2004 Репутация: нет Всего: 1 |
Если это тебе нужно в программе, то решить, можно несколькими способами :
Напиши процедурку в Buildere типа В QUERY засунь запрос : SELECT field_1 from table1 where field_1='value' IF QUERY.RecordCount >0 then str_value := QUERY.FieldByName('field1').Value; ... Query. :INSERT INTO table1(field_1) Values(:str_value) Что то типа этого, но это так сходу. Можно что-то по универсальнее и по красивее придумать. На сервере, конечно это лучше делать, но если нет возможности написать ХП, то на Builder у тебя больше возможностей. |
|||
|
||||
| Kaser |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.4.2003 Репутация: нет Всего: нет |
Спасибо, так и придется, просто очень уж не хочется - сетку жалко. Производится массовая вставка по 15 000 - 20 000 тысяч записей. (Сливаем из старых локальных баз в сетевую. Прикол: от Clarion не отказываются - не все в сети, вот и будут периодически заливать для синхронизации)
|
|||
|
||||
| jonik_Dk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 18.2.2004 Репутация: нет Всего: 1 |
М-да, это не прикол, у нас практически такая же фигня, работаем и на FoxPro2.6 и Informix
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Другие СУБД | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |