2013-06-13 2 views
0

То, что я пытаюсь сделать, это вставить/обновить различные версии в таблицу продуктов. Это кусок PL/SQL, и у меня есть переменная, содержащая номер версии. Допустим, что версия равна 10. Теперь я хочу использовать оператор слияния для вставки или обновления версий 11-15 для одного и того же продукта. Итак, мне нужно проверить таблицу для существующего продукта & версии (у меня есть product_id). Мне нужно сгенерировать числа с 11 по 15 и сравнить их с таблицей вместе с product_id. Итак, мой вопрос заключается в разделе использования - мне нужно сгенерировать номера версий (11-15), используя мою временную переменную, которая содержит 10 и добавляет в качестве второго столбца (версии). Пожалуйста, обновите базовый оператор MERGE, который у меня ниже для моего требования. Благодарю.basic MERGE в ту же таблицу

MERGE INTO product a 
USING (SELECT product_id, 
       version_id/variable 
     FROM product 
     WHERE product_id = 1234 
    ) b 
     ON (a.product_id = b.product_id AND a.version_id = b.version_id) 
WHEN MATCHED THEN 
    [UPDATE product] 
WHEN NOT MATCHED THEN 
    [INSERT INTO product] 
+1

В чем логика определения того, что это 11-15? Если это всего лишь «значения выше 10», используйте a.version_id> b.version_id –

ответ

3

Вы можете использовать генератор строк, например. это будет генерировать IdS версии 11 до 15 для вашего запроса, так что ваше слияние может вставить/обновить их в соответствии с требованиями:

MERGE INTO product a 
USING (SELECT product.product_id, 
       q.version_id 
     FROM product 
      ,(SELECT ROWNUM+10 version_id FROM dual CONNECT BY LEVEL <= 5) q 
     WHERE product_id = 1234 
    ) b 
ON (a.product_id = b.product_id AND a.version_id = b.version_id) 
WHEN MATCHED THEN 
    [UPDATE product] 
WHEN NOT MATCHED THEN 
    [INSERT INTO product] 
0

Выбранный ответ является немного сложным, так вот мой ответ, чтобы объединить в одну таблицу

MERGE INTO YOUR_TABLE d 
USING (SELECT 1 FROM DUAL) m 
    ON (d.USER_ID = '123' AND d.USER_NAME= 'itszaif') 
WHEN NOT MATCHED THEN 
     INSERT (d.USERS_ID, d.USER_NAME) 
     VALUES ('123','itszaif'); 

Эта команда проверяет USER_ID и USER_NAME совпадают, если не соответствует, то он будет вставить.

+1

Это не обновление. –

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