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年聖誕假期)
我不確定哪一個是單身人士。有沒有一種方法可以從這個存儲過程中看出來?
單獨運行每個查詢與問題輸入並查看結果是 – jle
謝謝@jle!我用僞代碼在概念上做了這件事,並找出了導致問題的原因。 –