首页 > 解决方案 > 在 SQL 中创建函数

问题描述

我尝试在 Oracle SQL Plus 中创建函数,但为什么会出现编译错误,是因为间距不正确,我使用的是记事本,所以我必须手动输入所有间距,推荐给我的任何应用程序来编写 SQL 代码,以便间距会像在 VS Code 中一样自动添加?

如果 Check_Out 字段和 Reason_Cancel 字段对于解析来宾 ID 的来宾为空,我正在尝试创建一个函数返回“True”或“False”。

DROP FUNCTION Check_Room_Booked;

CREATE FUNCTION Check_Room_Booked(
guest_nric VARCHAR(100)
)
RETURN VARCHAR(5)
AS
BEGIN 
  IF (SELECT COUNT(Guest) FROM BOOKING WHERE Guest = guest_nric AND Check_out IS NULL AND Reason_Cancel IS NULL) < 2 THEN RETURN 'True' ELSE RETURN 'False'
END;
/

标签: sqloraclefunctionplsql

解决方案


你的问题非常棘手。 首先- 您希望 TRUE/FALSE 作为布尔值或 'TRUE'/'FALSE' 作为函数结果返回的字符串? 第二- 当带有guest_nric的客人填充 Check_out AND Reason_Cancel 时返回 False,当 Check_out 为 NULL 且 Reason_Cancel 为 NULL 时返回 True,反之亦然?

但是让我们假设函数必须返回'TRUE'和'FALSE'作为字符串值,'TRUE'意味着有一个guest_nric的访客,其Check_out 为NULL并且Reason_Cancel为NULL。

请尝试以下代码:

CREATE OR REPLACE FUNCTION Check_Room_Booked (guest_nric VARCHAR2)
    RETURN VARCHAR2
IS
    l_count   NUMBER;
BEGIN
    SELECT COUNT (Guest)
      INTO l_count
      FROM BOOKING
     WHERE Guest = guest_nric AND Check_out IS NULL AND Reason_Cancel IS NULL;

    RETURN CASE WHEN l_count = 0 then 'False' else 'True' end;
END;
/

谢谢。


推荐阅读