Две переменные в одном запросе - процедура pl / sql - PullRequest
0 голосов
/ 09 апреля 2019

Мне нужно обновить несколько строк, используя один запрос или процедуру pl / sql

Вручную мне нужно сделать что-то подобное для каждой строки:

update item_product set product_no in ('8948061100060064024') where id in (1319180455);

для другого идентификатора, обновить разные product_no

Я пробовал процедуру pl / sql,

DECLARE 
   type ordersIDarray IS VARRAY(5) OF VARCHAR2(10); 
   type simArray IS VARRAY(5) OF VARCHAR2(20); 
   orders ordersIDarray;
   simNo simArray;

BEGIN 
   orders := ordersIDarray('1319180455,1319182309'); 
   simNo := simArray('8948061100060064024','8948061100060064055');

   for i in 1 .. total LOOP
   update item_product set product_no in (simNo(i)) where id in (orders(i));
   end loop;
END;

Есть идеи, как связать две переменные в одном запросе?

1 Ответ

0 голосов
/ 09 апреля 2019

Если у вас есть только несколько идентификаторов продукта, вы можете использовать:

update item_product 
    set product_no = case id 
                        when 1 then '8948061100060064024'
                        when 2 then '1234'
                        when 3 then '7890'
                      end
where id in (1,2,3);

Недостатком является то, что вам нужно повторять значения для столбца ID.

Вы можете обойти это, используя инструкцию MERGE со списком идентификаторов

merge into item_product 
using (
   select 1 as id, '8948061100060064024' as product_no from dual union all
   select 2 as id, '1234' from dual union all
   select 3 as id, '7890' from dual
) t on (t.id = item_product.id)
when matched then update 
    set product_no = t.product_no;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...