2013-03-07 5 views
0

Мне нужно написать запрос в Oracle, но я больше знаком с SQL Server.Запрос SQL Server для преобразования запросов Oracle

В SQL Server, то запрос будет выглядеть следующим образом: (упрощенный)

if exists (
    select * from table where a=1 
) 
begin 
    update table set b=1 where a=1 
end else 
begin 
    insert table (a,b) values(1,1) 
end 

Спасибо за любую помощь :)

=============== ================================================== ==============

Это опция Merge (я думаю):

MERGE INTO table T 
USING (
    SELECT a,b 
    FROM table 
) Q 
ON T.a = Q.a 
WHEN MATCHED THEN 
    UPDATE SET T.a = 1 
WHEN NOT MATCHED THEN 
    INSERT table (a,b) VALUES (1,1); 

Это правильно?

+0

Используйте оператор слияния. – Plouf

+0

Что это значит? Можете ли вы привести пример, связанный с вышеупомянутым SQL? Спасибо – CompanyDroneFromSector7G

+0

Stackoverflow может дать много их вам. ;) http://stackoverflow.com/search?q=oracle+merge – Plouf

ответ

2

Это должен быть правильный синтаксис для Oracle 11g. Я не эксперт по Oracle, поэтому, возможно, кто-то еще мог бы объяснить это лучше, но я считаю, что таблица dual используется при вставке новых значений или попытке слишком слияния из другой таблицы.

MERGE INTO table1 T 
USING (
    SELECT 1 a, 1 b FROM dual 
) Q 
ON (T.a = Q.a) 
WHEN MATCHED THEN 
    UPDATE SET b = 1 
WHEN NOT MATCHED THEN 
    INSERT (a,b) VALUES (Q.a,Q.b); 

Working example

Смежные вопросы