Oracle   发布时间:2022-05-17  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Oracle:如何在表中只激活一行?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个名为Active的字段的Oracle表.
此字段具有唯一约束,因此只有一行将标记为“活动”.

在添加新行或更新旧行时,数据库层中是否有任何方法只保留一行?

表的现状

ID        Active
----------------
1         yes

添加了一个新的活动行:

新表的状态

ID        Active
----------------
1         No
2         Yes

第1行使用Active = Yes进行更新

ID        Active
----------------
1         Yes
2         No

当然,当插入新行时,我无法使用触发器更新表.

有没有人知道如何做到这一点?

您需要使用有效值作为输入参数来调用此过程
CREATE OR replaCE PROCEDURE t416493.set_tab
    (
     p_ID IN tab.ID%TYPE,p_active_flag IN tab.active%TYPE,p_dml_type    IN VARCHAR2
    )

    IS 

    cursOR check_flag_exists
    IS 
    SELECT ID 
    FROM tab
    WHERE active = p_active_flag;

    v_ID tab.ID%TYPE;
    v_active_flag VARCHAR2(3);

    BEGIN

        OPEN check_flag_exists;
          FETCH check_flag_exists INTO v_ID;
            IF check_flag_exists%FOUND THEN 

              IF  p_active_flag ='Yes' THEN
                  v_active_flag :='No';
              ELSE
                 v_active_flag :='Yes';
              END IF;

                updatE tab
                 SET  active = v_active_flag
                WHERE ID =v_ID; 

            END IF; 
         CLOSE check_flag_exists;  

         IF p_dml_type ='INSERT' THEN 
          INSERT INTO tab 
           (ID,active
           )
           VALUES
           (p_ID,p_active_flag
           );
         ELSIF p_dml_type ='updatE' THEN
           updatE tab
           SET active =p_active_flag
           WHERE ID =v_ID; 
         END IF;  

    END set_tab;

你需要像这样调用你的proc,如下所示:

开始

set_tab
       (
         p_ID =>2,p_active_flag =>'Yes',p_dml_type   =>'INSERT'
        );

end;
/

大佬总结

以上是大佬教程为你收集整理的Oracle:如何在表中只激活一行?全部内容,希望文章能够帮你解决Oracle:如何在表中只激活一行?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: