是否可以在Oracle中从两个可选表更新表的列。我的意思是,有两个表的列完全相同,根据输入ID,我想更新相关的表。 例如。
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具有完全相同的列,具有不同的记录。
谢谢。
答案 0 :(得分:1)
我不认为单个语句可以实现,但您可以使用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 :(得分:0)
我真的很想知道为什么你会想要这个功能。我能想到的只是你拥有大量数据,并决定使用1个“存档”表和1个“活动”表将其拆分。
在这种情况下,您可以随时更新两个表。如果id不存在,则不会更新任何内容。它可能与首先从表a中选择id一样快,然后更新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;
答案 2 :(得分:0)
BEGIN
UPDATE Table_A SET STATUS ='0'WHERE A.ID =#ID#;
如果sql%notfound那么
UPDATE Table_B B SET STATUS ='0'WHERES B.ID =#ID#;
万一;
END;