Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Oracle. Insert


SergP ©   (2008-09-23 17:14:00) 

нужно написать запрос, типа:
INSERT into table (....) values (....)
но чтобы он срабатывал только при условии
not exists (select * from table where ...)

Как это правильно написать одним запросом?


Petr V. Abramov   (2008-09-24 20:36:00) [1]

работает в 10-ке, в 9-ке не знаю, в 8-ке не помню


Petr V. Abramov   (2008-09-24 20:35:00) [2]

insert all
 when not exists (select null from T_TABLE where ID = :id) then into T_TABLE
select :id, и пр. поля from dual


SergP   (2008-09-24 19:37:00) [3]

> если не нужно обновлять данные в существующей записи - то
> тупо инсерт с игнором ошибок.


Не получится... в этой таблице нет первичного ключа и уникальных индексов... (таблица не моя и не мне там констрейны придумывать).

А инсерт при этом ошибки не выдаст а может создать дублирующуюся запись.


ANB   (2008-09-24 19:26:00) [4]


> Ага. именно так...
>
> Хотя подумал и решил что проще сделать DELETE, а потом INSERT

если не нужно обновлять данные в существующей записи - то тупо инсерт с игнором ошибок.
Если нужно, то MERGE


SergP   (2008-09-24 18:35:00) [5]

> т.е. если записи в table нету, то вставить, если есть -
> успокоиться?


Ага. именно так...

Хотя подумал и решил что проще сделать DELETE, а потом INSERT


Petr V. Abramov   (2008-09-24 11:08:00) [6]

что not exists?
вставляемое значение в table?
т.е. если записи в table нету, то вставить, если есть - успокоиться?

насчет синтаксиса merge
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9016.htm#i2081218

десятошный


SergP   (2008-09-24 10:38:00) [7]

> merge ?


Хм... Не могу найти синтаксиса MERGE.
Может подскажете?


Игорь Шевченко   (2008-09-23 20:24:00) [8]

merge ?


SergP   (2008-09-23 17:23:00) [9]

> begin
> select .... into l_val;
> if l_var <,>,= some_value then
> insert into ......
> end;


хм. Предлагаете оформить в виде блока?


Поросенок Винни-Пух   (2008-09-23 17:19:00) [10]

begin
select .... into l_val;
if l_var <,>,= some_value then
 insert into ......
end;


SergP   (2008-09-23 17:19:00) [11]

Пробую так:

INSERT ALL
WHEN NOT EXISTS (SELECT * FROM def_igroup_tbl WHERE IDGROUP=50 AND TABLE_OWNER='DECLTR' AND TABLE_NAME='CARD') THEN
INTO def_igroup_tbl (IDGROUP,table_OWNER,table_name,sendable,deltabale) values (50,'DECLTR','CARD',1,1);


Не хочет работать...


Наверх

Титульная страница Поиск, карта сайта Написать письмо