【发布时间】:2023-02-08 17:05:15
【问题描述】:
我有以下存储过程:
create or replace PROCEDURE CALCULATE_RECOVERY_HISTORY(p_month IN VARCHAR2) AS
l_id NUMBER;
BEGIN
ADD_LOG_INFO('CALCULATE_RECOVERY_HISTORY', 'Procedure Started');
l_id := SQ_AP_RECOVERY_HISTORY.NEXTVAL;
INSERT INTO t_ap_recovery_history (ID, RECOVERY_TARGET_MONTH, TARGET_INSTANCE, RECOVERY_PROGRESS, RECOVERY_TARGET, FAILED_TO_RECOVERY, FOCUS_AREA, IDENTIFIER_CLASS, CREATED_ON)
SELECT l_id,
a_recovery_target_month,
a_target_instance,
COUNT(CASE WHEN A_IS_RECOVERED = 'Y' THEN 1 END),
COUNT(CASE WHEN A_IS_RECOVERED IN ('Y', 'N') THEN 1 END),
COUNT(CASE WHEN A_IS_RECOVERED = 'N' THEN 1 END),
f.focus_area,
r.identifier_class,
SYSDATE
from t_ap_recovery_target t, t_ap_recovery_focusarea f, range r
where t.a_focus_area_id = f.id and t.a_range_id = r.id
and t.a_recovery_target_month = p_month
group by a_target_instance, a_recovery_target_month, f.focus_area, r.identifier_class;
COMMIT;
END CALCULATE_RECOVERY_HISTORY;
当我运行程序时,出现错误
ORA-00001: 违反唯一约束。
我也试过另一种方法是
SELECT SQ_AP_RECOVERY_HISTORY.NEXTVAL, a_recovery_target_month ...但这也会返回另一个错误,即
此处不允许使用序号
我应该在代码中更改什么来解决这个约束问题?
【问题讨论】:
-
向我们展示 t_ap_recovery_history 的定义。
-
今日提示:始终使用现代、明确的
JOIN语法。更易于编写(无错误),更易于阅读和维护,并且在需要时更易于转换为外部连接。
标签: sql oracle stored-procedures plsql