2013-12-19 36 views
0

昨天,我們以前從未見過的舊版軟件出現異常。它觸發以下錯誤: multiple rows in singleton select At procedure 'POINTS_BALANCE'Singleton Select多行選擇

這裏是存儲過程

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年聖誕假期)

我不確定哪一個是單身人士。有沒有一種方法可以從這個存儲過程中看出來?

+1

單獨運行每個查詢與問題輸入並查看結果是 – jle

+0

謝謝@jle!我用僞代碼在概念上做了這件事,並找出了導致問題的原因。 –

回答

0

SCHED_POINT_PERIODS應該有不重疊的時期。 (即它們應該是唯一的)。這是錯誤所指的單身人士。

我注意到這個重疊通過數據庫,並在內部解決這個問題。錯誤已解決。