“单一实例选择”中的多行



昨天,我们的旧软件发生了我以前从未见过的异常情况。它会触发以下错误: multiple rows in singleton select At procedure 'POINTS_BALANCE'

这是存储过程

CREATE PROCEDURE POINTS_BALANCE (
    OPERATOR CHAR (3),
    PERIOD VARCHAR (75))
RETURNS (
    P_BALANCE INTEGER)
AS 
DECLARE VARIABLE B_DATE timestamp;
DECLARE VARIABLE E_DATE timestamp;
DECLARE VARIABLE ALLOWED_POINTS INTEGER;
begin
  P_BALANCE = NULL;
  SELECT DATE_BEGIN, DATE_END, TOTAL_POINTS FROM SCHED_POINT_PERIODS
    WHERE DESCRIPTION = :PERIOD INTO :B_DATE, :E_DATE, :ALLOWED_POINTS;
  IF (B_DATE IS NULL) THEN
   BEGIN    
    SELECT DATE_BEGIN, DATE_END, TOTAL_POINTS FROM SCHED_POINT_PERIODS
      WHERE cast('NOW' as timestamp) BETWEEN DATE_BEGIN AND DATE_END+1 INTO :B_DATE, :E_DATE,
      :ALLOWED_POINTS;
   END
  IF (B_DATE IS NOT NULL) THEN
    BEGIN
     E_DATE = E_DATE + 1;
     SELECT SUM(POINTS)+:ALLOWED_POINTS FROM SCHED_ACTUAL 
      WHERE OPR = :OPERATOR AND BEGIN_TIME BETWEEN :B_DATE AND :E_DATE 
      INTO :P_BALANCE;
     IF (P_BALANCE IS NULL) THEN
       P_BALANCE = ALLOWED_POINTS;
    END
  SUSPEND;
end

SCHED_ACTUAL是一个表格,其中包含每个用户的签入、签出时间 SCHED_POINT_PERIODS是一个表,用于保存每个期间的Allowed_Point值(如 2013 年春季、2013 年秋季、2013 年圣诞节假期)

我不确定哪一个是单例。有没有办法仅从此存储过程中分辨出来?

SCHED_POINT_PERIODS应该

有不重叠的句点。(即它们应该是唯一的)。这是错误所指的单例。

我通过数据库注意到这种重叠,并在内部修复了这个问题。错误已解决。

最新更新