oracle – 从PL / SQL函数返回多个值
发布时间:2021-01-19 10:18:30 所属栏目:站长百科 来源:网络整理
导读:我需要尝试在飞机上找到一个免费座位,然后保留该座位. 我需要返回一个值来表示成功与否以及座位号.通过环顾四周,我发现函数不能返回超过1的值,所以我考虑使用数组,但是查看那些文档,很明显我在PL / SQL上不太了解如何使用它们. 所以我在这里搁浅了. 到目前为
我需要尝试在飞机上找到一个免费座位,然后保留该座位. 我需要返回一个值来表示成功与否以及座位号.通过环顾四周,我发现函数不能返回超过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变量.它必须是一个.您可以使用可以从函数返回的自定义rec类型或数组. 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; (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |