простой пример хранимой процедуры оракула для обновления двух таблиц за один раз - PullRequest
1 голос
/ 29 сентября 2011

Может ли кто-нибудь привести простой пример хранимой процедуры Oracle для обновления двух таблиц за один раз.

Ответы [ 2 ]

6 голосов
/ 29 сентября 2011
CREATE OR REPLACE PROCEDURE update_2_tables
IS
begin
  update t1 set c1 = 1;
  update t2 set c1 = 2;
end;
/
2 голосов
/ 29 сентября 2011

Я предположил, что вы обновляете таблицы a и b значениями из c. Это PL / SQL

create or replace procedure update_one_scan as
  cursor c is 
   select a.rowid r1, b.rowid r1, c.value_to_get
   from a join b on (join conditions)
     join c on (join conditions)
   where conditions;
begin
  for r in c
  loop
    update a set col_to_update=r.value_to_get where rowid=r1;
    update b set col_to_update=r.value_to_get where rowid=r2;
  end loop;
end;

У вас есть преимущество однократного сканирования исходных таблиц.

UPDATE: Вы можете сделать это даже в Oracle SQL, но это более ограничительно (вы увидите, когда попробуете). Но это может быть быстрее.

Является оператором UPDATE SELECT:

Create or replace Procedure update_select AS
BEGIN
  update
  (select a.col_to_update as c1, b.col_to_update as c2, c.value_to_get v1
         from a join b on (join conditions)
           join c on (join conditions)
         where conditions)
  set 
  c1 = v1, c2 = v2;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...