Использование 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;
Другие вопросы по тегам