0

我需要 firebird 3.0 中的存储过程来返回 True、False 或 1,0 结果以检查此人或记录是否存在于数据库中。如果存在该过程应该返回true,如果不返回False,或者返回1,如果不返回0

这是我的程序,但它给了我一个错误: https://i.ibb.co/HLZQY59/Capture.jpg

令牌无效。
动态 SQL 错误。
SQL 错误代码 = -104
令牌未知 - 第 10 行,第 1 列。
结束。

我想通过检查名字姓氏和出生日期来检查记录是否存在。

create procedure aa(
v varchar(20),
g varchar(20),
dd date)
as 
begin
select fname,lname,bday from STUDENT
where not exists (select fname,lname,bday from STUDENT  where fname=:v and lname=:g and bday=:dd)
end
4

1 回答 1

1

您的存储过程不起作用,因为 1) 它没有RETURNS子句,因此它不能返回 true 或 false,以及 2) PSQL 中的选择需要一个INTO子句将值放入变量或返回参数中。

根据您的代码,执行您想要的存储过程将是:

create procedure aa(
  v varchar(20),
  g varchar(20),
  dd date)
  returns (student_exists boolean)
as 
begin
  student_exists = exists (select * from STUDENT where fname=:v and lname=:g and bday=:dd);
end

根据您需要实现的目标,一个函数可能更合适:

create procedure aa(
  v varchar(20),
  g varchar(20),
  dd date)
  returns boolean
as 
begin
  return exists (select * from STUDENT where fname=:v and lname=:g and bday=:dd);
end
于 2020-08-22T07:58:05.363 回答