Слияние без исходной таблицы Oracle SQL Developer - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь объединить данные в базу данных, и я не могу без таблицы, и я хотел бы не создавать временную таблицу, чтобы потом просто удалить ее

MERGE INTO target_table target
USING ('0101-2019' as date, 1515 as random_data, 9595 as more_random_data) source
ON (target.date= source.date) 
WHEN MATCHED THEN
    UPDATE  SET target.date = source.date,  
                    target.random_data = source.random_data, 
                    target.more_random_data = source.more_random_data
WHEN NOT MATCHED THEN
    INSERT  (date,  random_data, more_random_data)
    VALUES (source.date,  source.random_data, source.more_random_data);

По какой-то причине я мог найти метод, который работал бы, если бы я не использовал Oracle SQL Developer, но я не могу перевести его на Oracle

MERGE target_table AS target
USING   (VALUES ('0101-2019', 1515, 9595))
     AS source(date, random_data, more_random_data)
ON target.date= source.date
WHEN MATCHED THEN
    UPDATE  SET target.date = source.date,
                    target.random_data = source.random_data
                    target.more_random_data = source.more_random_data
WHEN NOT MATCHED BY target THEN
    INSERT  (date, random_data, more_random_data)
    VALUES (source.date, source.random_data, source.more_random_data)
WHEN NO TMATCHED BY source THEN
    DELETE

Не спрашивайте меня, где бы это сработало, вот некоторые примеры, которые я нашел из примеров, которые я написал, чтобы соответствовать моей ситуации, но, поскольку я использую SQL Developer от Oracle, у меня это не сработало.

1 Ответ

1 голос
/ 15 апреля 2019

Oracle по-прежнему не поддерживает стандартный конструктор строк VALUES. Необходимо использовать обходной путь с select from dual:

USING (
   select '0101-2019' as date, 1515 as random_data, 9595 as more_random_data
   from dual
) source
...