sql - 在 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;
/
解决方案
你的问题非常棘手。 首先- 您希望 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;
/
谢谢。
推荐阅读
- c++ - 寻找最小的下一个更大的元素
- angular - “OperatorFunction”类型上不存在属性“catch”
' - c# - 如果它们附加到不同的对象并且在不同的场景中,如何将分数传递给记分牌c#
- python - Python,纸牌游戏,AttributeError
- node.js - 无法访问预保存中间件 mongoose 中的架构属性
- excel - Excel筛选操作
- oop - 暴露流或使用观察者模式
- public-key-encryption - 如何从给定的公钥在 gpg 中创建公钥文件
- docker - 如何在 docker-compose 文件中获取和设置随机服务端口作为 env var?
- javascript - TypeError:参数 1 对 URL.createObjectURL 的任何 1 参数重载都无效