我需要尝试在飞机上找到一个免费座位,然后保留该座位.
我需要返回一个值来表示成功与否以及座位号.通过环顾四周,我发现函数不能返回超过1的值,所以我考虑使用数组,但是查看那些文档,很明显我在PL / sql上不太了解如何使用它们.
所以我在这里搁浅了.
到目前为止,我得到的代码如下所示:
CREATE OR REPLACE FUNCTION RESERVE_SEAT(P_NO VARCHAR2,ID NUMBER,RESERVE_TIME NUMBER,S_NO VARCHAR2) RETURN INTEGER AS RES INTEGER := 0; COUNTS INTEGER := 0; BEGIN SELECT COUNT(*) INTO COUNTS FROM SEAT WHERE SEAT_NO=S_NO AND PLANE_NO=P_NO; IF(COUNTS = 1) THEN UPDATE SEAT SET RESERVED = ID,BOOKING_TIME = RESERVE_TIME,BOOKED=ID WHERE PLANE_NO=P_NO AND SEAT_NO=S_NO; COMMIT; ELSE IF(COUNTS = 0) THEN RES := -1; END IF; END IF; RETURN RES; END RESERVE_SEAT;
CREATE OR REPLACE FUNCTION GET_FREE_SEAT(P_NO VARCHAR2,RESERVE_TIME NUMBER) RETURN INTEGER AS RESERVED_SEAT_NO VARCHAR2(100) := 'NULL'; RES INTEGER := 0; -- Assume Success Scenario from the Get-go BEGIN SELECT SEAT_NO INTO RESERVED_SEAT_NO FROM SEAT WHERE RESERVED IS NULL AND BOOKED IS NULL AND ROWNUM = 1 OR BOOKED IS NULL AND ((RESERVE_TIME - 5000) <= BOOKING_TIME) AND ROWNUM = 1; IF(RESERVED_SEAT_NO != 'NULL') THEN RES := RESERVE_SEAT(P_NO,ID,RESERVE_TIME,RESERVEd_SEAT_NO); END IF; RETURN RES; END GET_FREE_SEAT;
目前还不确定要做什么.
如何返回RES和RESERVED_SEAT_NO?
解决方法
你无法返回2变量.它必须是一个.
TYPE new_type is record(RES pls_integer,RESERVED_SEAT_NO pls_integer); CREATE OR REPLACE FUNCTION GET_FREE_SEAT(P_NO VARCHAR2,RESERVE_TIME NUMBER) RETURN new_type AS new_type_variable BEGIN SELECT SEAT_NO INTO new_type_variable.RESERVED_SEAT_NO FROM SEAT WHERE RESERVED IS NULL AND BOOKED IS NULL AND ROWNUM = 1 OR BOOKED IS NULL AND (RESERVE_TIME - 5000) <= BOOKING_TIME AND ROWNUM = 1; IF(RESERVED_SEAT_NO != 'NULL') THEN select RESERVE_SEAT(P_NO,RESERVEd_SEAT_NO) into new_type_variable.res from dual; END IF; RETURN new_type_variable; END GET_FREE_SEAT;