我有一个函数,select中的数据需要与IF中的条件进行比较,如果select中有一行,那么它将返回ret_val=0。
但如果有两行或更多行,其中一行满足条件,而另一行不满足条件,那么它仍然不返回0,而是返回rec_tkt_sess.cash_out。
有人能告诉为什么光标在返回0时没有这些数据吗?
好像光标没有穿过所有行。。。
CREATE OR REPLACE FUNCTION cash_out_ticket_cond(party_id IN casino_users.party_id%TYPE ,session_id IN bus_session.session_id%TYPE
) RETURN NUMBER AS ret_val NUMBER;
P_EXCHANGE_BET_CREDITS COUNTRY.EXCHANGE_BET_CREDITS%type;
P_EXCHANGE_VALUE COUNTRY.EXCHANGE_VALUE%type;
CURSOR cur_tkt_sess (party_id IN casino_users.party_id%TYPE,session_id IN .bus_session.session_id%TYPE)
IS
SELECT bs.session_id
,tii.status
,ROW_NUMBER() OVER (PARTITION BY bs.session_id ORDER BY status ASC) rn
,NVL(TO_CHAR(bs.started, 'DD.MM.YYYY HH24:MI'), 'Live') started
,bs.bet bet
,tii.time_p
,tii.live_prematch
,cash_out(bet) cash_out
FROM bus_session bs
,ticket_items tii
WHERE bs.session_id = tii.bus_session_session_id
AND bs.session_type = 'TICKET SESSION'
AND bs.party_id = cur_tkt_sess.party_id
AND bs.session_id = cur_tkt_sess.session_id
AND NVL(bs.session_close, 'N') = 'N';
rec_tkt_sess cur_tkt_sess%ROWTYPE;
BEGIN
CHAGE_CREDITS (party_id, P_EXCHANGE_BET_CREDITS, P_EXCHANGE_VALUE);
OPEN cur_tkt_sess(cash_out_ticket_cond.party_id, cash_out_ticket_cond.session_id);
FETCH cur_tkt_sess
INTO rec_tkt_sess;
IF(cur_tkt_sess%FOUND) THEN
IF(
(TO_DATE(rec_tkt_sess.started,'DD.MM.YYYY HH24:MI:SS') +1 <=SYSDATE) -- is ticket older then 24 hours
OR
(rec_tkt_sess.live_prematch != '0') --is it live (1 live , 0 not live)
OR
(rec_tkt_sess.time_p <SYSDATE) -- is game begin
)
THEN
ret_val := 0;
ELSE
ret_val := rec_tkt_sess.cash_out;
END IF;
ELSE
ret_val := -1;
END IF;
RETURN(ret_val);
END cash_out_ticket_cond;