Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Insert по условию (IBM DB2), SQL-запрос: помогите сделать 
:(
    Опции темы
Kaser
Дата 19.4.2004, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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-запросом - не знаю. Это вообще возможно?
PM MAIL   Вверх
Nobody
Дата 19.4.2004, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

Репутация: нет
Всего: 16



А нельзя сказать, что это поле UNIQUE (сорри, не знаю, как именно это выглядит в DB2) и тупо проинсёртить всё подряд. Тогда на те значения, которые уже есть, просто вывалится ошибка и всё.


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
jonik_Dk
Дата 20.4.2004, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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

PM MAIL   Вверх
Kaser
Дата 20.4.2004, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.4.2003

Репутация: нет
Всего: нет



To Nobody:
Поясняю: это поле и так UNIQUE, а делается это как раз для того, чтобы избавить себя от ловли этих ошибок(а пока сделано, как уважаемый Nobody и описал)
To jonik_Dk:
Цитата
Сделай процедуру не поленись, изучи!!!

Я не ленивый. Просто DB2 - та, которая стоит в ЦИТе (смешная контора, где приходится работать) то ли не настроена, то ли что не поставлено, но на всякие попытки создать процедуру ругается "чего-то там не найдено". Причем товарищ старший админ эту проблему не решил. Вешал это дело на триггер на вставку, но мне это требуется не всегда, а включать / отключать триггеры - дело не благодарное.

PM MAIL   Вверх
jonik_Dk
Дата 20.4.2004, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 18.2.2004

Репутация: нет
Всего: 1



Чем пользуешься Delphi или еще что то?
PM MAIL   Вверх
Kaser
Дата 21.4.2004, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.4.2003

Репутация: нет
Всего: нет



Пользую CBuilder5.0
Добавлено @ 08:21
Да,
Цитата
SELECT field_1 from table1 where field_1='value' INTO TEMP a;

INSERT INTO table1(field_1) Select a.field_1 from a

не проходит - пытается вставить NULL-значения (когда ничего не нужно)
PM MAIL   Вверх
jonik_Dk
Дата 21.4.2004, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 у тебя больше возможностей.

PM MAIL   Вверх
Kaser
Дата 21.4.2004, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 25.4.2003

Репутация: нет
Всего: нет



Спасибо, так и придется, просто очень уж не хочется - сетку жалко. Производится массовая вставка по 15 000 - 20 000 тысяч записей. (Сливаем из старых локальных баз в сетевую. Прикол: от Clarion не отказываются - не все в сети, вот и будут периодически заливать для синхронизации)
PM MAIL   Вверх
jonik_Dk
Дата 21.4.2004, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 18.2.2004

Репутация: нет
Всего: 1



М-да, это не прикол, у нас практически такая же фигня, работаем и на FoxPro2.6 и Informix
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие СУБД | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.