• SergP © (23.09.08 17:14) [0]
    нужно написать запрос, типа:
    INSERT into table (....) values (....)
    но чтобы он срабатывал только при условии
    not exists (select * from table where ...)

    Как это правильно написать одним запросом?
  • Поросенок Винни-Пух © (23.09.08 17:19) [1]
    begin
    select .... into l_val;
    if l_var <,>,= some_value then
     insert into ......
    end;
  • SergP © (23.09.08 17:19) [2]
    Пробую так:

    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);



    Не хочет работать...
  • SergP © (23.09.08 17:23) [3]
    > begin
    > select .... into l_val;
    > if l_var <,>,= some_value then
    > insert into ......
    > end;


    хм. Предлагаете оформить в виде блока?
  • Игорь Шевченко © (23.09.08 20:24) [4]
    merge ?
  • SergP © (24.09.08 10:38) [5]
    > merge ?


    Хм... Не могу найти синтаксиса MERGE.
    Может подскажете?
  • Petr V. Abramov © (24.09.08 11:08) [6]
    что not exists?
    вставляемое значение в table?
    т.е. если записи в table нету, то вставить, если есть - успокоиться?

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

    десятошный
  • SergP © (24.09.08 18:35) [7]
    > т.е. если записи в table нету, то вставить, если есть -
    > успокоиться?


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

    Хотя подумал и решил что проще сделать DELETE, а потом INSERT
  • ANB (24.09.08 19:26) [8]

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

    если не нужно обновлять данные в существующей записи - то тупо инсерт с игнором ошибок.
    Если нужно, то MERGE
  • SergP © (24.09.08 19:37) [9]
    > если не нужно обновлять данные в существующей записи - то
    > тупо инсерт с игнором ошибок.


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

    А инсерт при этом ошибки не выдаст а может создать дублирующуюся запись.
  • Petr V. Abramov © (24.09.08 20:35) [10]
    insert all
     when not exists (select null from T_TABLE where ID = :id) then into T_TABLE
    select :id, и пр. поля from dual

  • Petr V. Abramov © (24.09.08 20:36) [11]
    работает в 10-ке, в 9-ке не знаю, в 8-ке не помню
Есть новые Нет новых   [134473   +28][b:0][p:0.001]