Oracle:如何在表中只激活一行?
发布时间:2020-12-12 16:24:29 所属栏目:百科 来源:网络整理
导读:我有一个名为Active的字段的Oracle表. 此字段具有唯一约束,因此只有一行将标记为“活动”. 在添加新行或更新旧行时,数据库层中是否有任何方法只保留一行? 例 表的现状 ID Active----------------1 yes 添加了一个新的活动行: 新表的状态 ID Active--------
我有一个名为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; / (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |