Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中创建函数_Sql_Oracle_Function_Plsql - Fatal编程技术网

在SQL中创建函数

在SQL中创建函数,sql,oracle,function,plsql,Sql,Oracle,Function,Plsql,我尝试在Oracle SQL Plus中创建函数,但为什么会出现编译错误?是因为间距不正确,我使用记事本,所以我必须手动输入所有间距,任何应用程序都建议我编写SQL代码,以便像VS代码一样自动添加间距 我正在尝试创建一个函数返回'True'或'False',如果具有来宾id的来宾的Check\u Out字段和Reason\u Cancel字段为空 DROP FUNCTION Check_Room_Booked; CREATE FUNCTION Check_Room_Booked( guest_

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

我正在尝试创建一个函数返回'True'或'False',如果具有来宾id的来宾的Check\u Out字段和Reason\u Cancel字段为空

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;
/

您试图定义的函数有很多问题。下面的示例可能实现了您试图实现的目标:

创建或替换功能检查\u房间\u预定客人\u nric VARCHAR2 返回VARCHAR2 是 l_计数编号; 开始 选择COUNT Guest 进入l_计数 从预订 其中Guest=Guest\u nric和Check\u out为空,Reason\u Cancel为空; 当l_计数小于2时返回案例,然后为“False” 否则“真实”的结局; 终止 /
你的问题很棘手。 首先-要将TRUE/FALSE作为布尔值,还是将'TRUE'/'FALSE'作为函数返回的字符串? 第二个-当带有guest\u nric的guest已填充Check\u out和Reason\u Cancel时返回False,当Check\u out为空且Reason\u Cancel为空时返回True,反之亦然

但我们假设函数必须返回'TRUE'和'FALSE'作为字符串值,而'TRUE'意味着有一个guest,其Check为NULL,Reason为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;
/

谢谢。

间距在PL/SQL中没有意义。使用该代码确实会出现编译错误,但它们与间距无关。当出现编译错误时,请发出sqlplus“show error”命令。我把它留作练习,让学生查找该命令并查看它的功能。下载OracleSQLDeveloper。它可能不是最好的IDE,但它是免费的,并且支持数据库。@mathguy-我根据您的建议更新了代码。