3

是否可以在 Oracle 中从两个可选表中更新表的列。我的意思是,有 2 个表的列完全相同,根据输入 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 具有完全相同的列和不同的记录。

谢谢你。

4

3 回答 3

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;

结尾;

于 2012-04-26T14:36:32.450 回答
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;
于 2012-04-26T18:21:49.803 回答
0

开始更新 Table_A A SET STATUS = '0' WHERE A.ID = #ID#; 如果 sql%notfound 则
UPDATE Table_B B SET STATUS = '0' WHERE B.ID = #ID#; 万一; 结尾;

于 2012-05-04T08:49:02.727 回答