![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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);
Не хочет работать...