Как я могу обновить три таблицы одновременно? - PullRequest
0 голосов
/ 05 апреля 2020

Теперь есть три таблицы, которые хранят информацию об игроке и имеют точно такую ​​же структуру таблицы. Как я могу обновить все три таблицы одновременно?

Например, измените национальность с идентификатором 305 на "AUS" в одной таблице.

UPDATE ATHLETE1
SET CCODE = 'AUS'
WHERE ATHLETEID = 305;

Как это можно сделать процесс для трех таблиц (ATHLETE1, ATHLETE2, ATHLETE3), которые имеют одинаковую структуру таблицы. Как это:

UPDATE ATHLETE1, ATHLETE2, ATHLETE3
SET CCODE = 'AUS'
WHERE ATHLETEID = 305;

Ответы [ 3 ]

4 голосов
/ 05 апреля 2020

Помимо вопроса о том, почему ваша модель данных такова, общий ответ таков: вы можете использовать процедуру PL / SQL:

create or replace procedure set_athlete_country
    ( p_athleteid  athlete1.athleteid%type
    , p_ccode      athlete1.ccode%type )
as
begin
    update athlete1
    set    ccode = p_ccode
    where  athleteid = p_athleteid;

    update athlete2
    set    ccode = p_ccode
    where  athleteid = p_athleteid;

    update athlete3
    set    ccode = p_ccode
    where  athleteid = p_athleteid;

end set_athlete_country;

Теперь вы можете выполнять все связанные изменения в один вызов, который завершается успешно или завершается неудачей как единое целое.

call set_athlete_country(305, 'AUS');
3 голосов
/ 05 апреля 2020

Вы можете использовать PL / SQL dynamici c query :

SQL> declare
 v_ccode athlete1.ccode%type := 'AUS';
 v_id    athlete1.athlete_id%type := 305;
begin
 for i in 1..3 loop
   execute immediate 'update athlete'||i||' 
                         set ccode = :code 
                       where athlete_id = :id' using v_ccode,v_id;  
 end loop;
  commit;
end;
/

Но учтите, что обновление всех этих трех таблиц невозможно в пределах одной SQL Обновление выписки.

2 голосов
/ 05 апреля 2020

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

Таким образом, это будет:

UPDATE athletes 
SET ccode = 'AUS' 
WHERE athleteid = 3;
...