Как заменить значение столбца другим значением столбца таблицы? - PullRequest
1 голос
/ 25 мая 2019

У меня есть 2 таблицы, и я хочу заменить значение столбца значением из другого значения столбца. Я хочу использовать функцию REPLACE в операторе Begin..End. Любая помощь приветствуется. Спасибо

Declare  
  l_id    Varchar2(20);     
  l_name  Varchar2(20);  
  l2_name Varchar2(20);  
Begin   
  Select t1.id,t1.name, t2.name 
    into l_id,l_name,l2_name 
    From t t1 join ta2 t2 
      on t1.id = t2.id ;   

  Select Replace(Replace(t2.name,'Name', t1.name), 'Id', t1.id);  
End   

Table and result

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Вы можете просто выдать select с выражением:

select t1.id, t1.name, replace(replace(t1.details, 'Name', t2.name), 'Id', t2.id)
into l_id, l_name, l2_name 
from t t1 join
     ta2 t2 
     on t1.id = t2.id ;

Примечание: запрос возвращает столько строк, сколько он генерирует, что может привести к ошибке.В вашем запросе неясно, что вы действительно хотите сделать.

Если вам нужен update, возможно, вы намереваетесь просто сбросить имя в одной из таблиц:

update t1
     set name = (select t2.name from ta2 where t2.id = ta.id)
     where exists (select 1 from ta2 where t2.id = ta.id);
0 голосов
/ 25 мая 2019

Нет необходимости использовать PL/SQL блоки, но это может управляться одним оператором update:

update table1 t
   set details = (
  with cte as (
    select *
      from table2 
  )
  select replace(replace(t.details,'Name',cte.name),'Id',cte.ID)
    from cte 
   where cte.DOB = t.DOB
 );

Демо

...