加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长百科 > 正文

oracle – 从PL / SQL函数返回多个值

发布时间:2021-01-21 06:29:08 所属栏目:站长百科 来源:网络整理
导读:我需要尝试在飞机上找到一个免费座位,然后保留该座位. 我需要返回一个值来表示成功与否以及座位号.通过环顾四周,我发现函数不能返回超过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;

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读