大佬教程收集整理的这篇文章主要介绍了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,请注明来意。