作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Oracle 表,其字段名为 活跃 .
该字段具有唯一约束,因此只有一行将被标记为事件。
有什么办法在数据库添加新行或更新旧行时仅保留一行事件的图层?
例子
表的当前状态
ID Active
----------------
1 yes
ID Active
----------------
1 No
2 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;
set_tab
(
p_id =>2
,p_active_flag =>'Yes'
,p_dml_type =>'INSERT'
);
end;
/
关于甲骨文 : How to have only one row active in a table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21402776/
我是一名优秀的程序员,十分优秀!