Обновить запись, если присутствует; еще вставьте в Oracle

StackOverflow https://stackoverflow.com/questions/4764991

Вопрос

Есть ли какая -либо функция Oracle, которая указывает на существование записи или любую другую полезную технику для достижения этого?

РЕДАКТИРОВАТЬ: Использование оператора Merge, которое я сделал:

MERGE
 INTO  lims_min.mytab src
 USING lims_min.mytab tgt
    ON (    src.col1 = tgt.col1
        AND tgt.col1 = p_val1
        AND src.col2 = tgt.col2
        AND tgt.col2 = p_val2
       )

 WHEN MATCHED
 THEN
 UPDATE
  SET tgt.col3=p_val3,
      tgt.col4=p_val4

 WHEN NOT MATCHED
 THEN
 INSERT  (col1, col2, col3, col4)
 VALUES  (val1, val2, val2, val4);

Я получаю ошибку, говоря, что COL3 является недействительным идентификатором. Нет опечаток, и это существующий столбец. P_VAL1, P_VAL2, P_VAL3 и P_VAL4 - это струнные параметры, которые передаются в хранимую процедуру. Я думаю, что проблема может лежать в этих параметрах, возможно, их следует поместить внутри утверждения, где? Любые идеи?

Это было полезно?

Решение

Ты ищешь merge в Oracle.

MERGE
       INTO  target_table tgt
      USING source_table src
         ON  ( src.object_id = tgt.object_id ) //The key to check if the record exists
       WHEN MATCHED // if exists
       THEN
     UPDATE
        SET   tgt.object_name = src.object_name //update it
        ,     tgt.object_type = src.object_type
       WHEN NOT MATCHED                         // if not exists
       THEN
     INSERT ( tgt.object_id                    //then insert
            , tgt.object_name
            , tgt.object_type )
     VALUES ( src.object_id
            , src.object_name
            , src.object_type );

Другие советы

Посмотрите на заявление о слиянии

http://psoug.org/reference/merge.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top