oracle – 从PL / SQL函数返回多个值
发布时间:2021-01-20 04:17:40  所属栏目:百科  来源:网络整理 
            导读:我需要尝试在飞机上找到一个免费座位,然后保留该座位. 我需要返回一个值来表示成功与否以及座位号.通过环顾四周,我发现函数不能返回超过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;
        
            
        	
                        (编辑:52站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  

