Использование Case When Оператор для обновления из двух таблиц
Можно ли обновить столбец таблицы из двух дополнительных таблиц в Oracle. Я имею в виду, что есть 2 таблицы, столбцы которых в точности совпадают, и, в соответствии с идентификатором ввода, я хочу обновить связанную таблицу. Например,
UPDATE CASE WHEN EXISTS (
SELECT A.ID FROM Table_A A
WHERE A.ID = 'B1'
)
THEN
Table_A A
SET A.Status = '0'
WHERE A.ID = 'B1'
ELSE
Table_B B
SET B.Status = '0'
WHERE B.ID = 'B1'
Где Table_A и Table_B имеют абсолютно одинаковые столбцы с разными записями.
Спасибо.
3 ответа
НАЧАТЬ ОБНОВЛЕНИЕ Table_A A SET STATUS = '0' WHERE A.ID = #ID#; если sql% не найден, то
ОБНОВЛЕНИЕ Table_B B SET STATUS = '0' ГДЕ B.ID = #ID#;
END IF; КОНЕЦ;
Я не думаю, что это возможно с одной оценкой, но вы могли бы достичь этого с помощью PL/SQL:
declare
VarCount number;
begin
SELECT COUNT(*)
INTO VarCount
FROM Table_A
WHERE ID = 'B1';
IF VarCount > 1 THEN
UPDATE Table_A
SET Status = '0'
WHERE ID = 'B1';
ELSE
UPDATE Table_B
SET Status = '0'
WHERE ID = 'B1';
END IF;
конец;
Мне действительно интересно, почему вы хотели бы эту функциональность. Все, о чем я могу думать, это то, что у вас много данных, и вы решили разделить их, используя 1 "архивную" таблицу и 1 "активную" таблицу.
В этом случае вы можете просто обновить обе таблицы. Если идентификатор не существует, ничего не будет обновлено. Это может быть так же быстро, как сначала выбрать по идентификатору из таблицы a, а затем обновить либо a, либо b. Вы также можете использовать блок pl/sql для лучшей производительности. (Он будет выполнять только второй оператор, когда это необходимо)
create or replace procedure update_table(p_id in table_a.id%type)
as
begin
update table_a
set status = 0
where id = p_id;
-- only update table_b if table_a didn't update anything
if sql%rowcount == 0 then
update table_b
set status = 0
where id = p_id;
end if;
end;