2011-01-21 100 views
1

是否有任何指示存在記錄或其他有用技巧的Oracle功能?更新記錄是否存在;否則在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是無效的標識符。沒有錯別字,它是現有的column.p_val1,p_val2,p_val3和p_val4是傳遞給存儲過程的字符串參數。我認爲這個問題可能存在於這些參數中,也許它們應該置於WHERE語句中? 任何想法?

+0

甲骨文10,我得到了 「PL/SQL:ORA-00904: 」P COL3「。」 「:無效的標識符」 – sarsnake 2011-01-22 00:15:54

+1

我認爲你需要到:「MERGE INTO tgt」(不是src) - 切換那些;我不認爲你需要加入你的src&tgt表 - 只需指定:ON(src.col1 = p_val1和src.col2 = p_val2) – Gerrat 2011-01-22 00:33:29

回答

4

您正在尋找Oracle的merge

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