检查 select 语句在 pl/sql 中的函数中是否为真

check if select statement is true in a function in pl/sql

所以我有一辆 table 汽车,设计如下:ID、型号、类别、可用性。 类别是标准和豪华。 我正在尝试编写一个 returns 布尔值或 int 的函数,如下所示:

function(id)
if category == luxury;
return 1;
else return 0;

我做了这个 select 声明,但我不知道我是否可以使用它

SELECT (CASE WHEN Category = 'Luxury' THEN 1 ELSE 0 END) AS is_equal
FROM CARS
WHERE ID = 'TM63DTI';

我必须在 pl/sql 完成。它用于学校项目,我停留在这一点上。这个 select 语句没有错误,我只是不知道如何使用它。也许建议我如何处理这个问题。

PL/SQL 表示“Oracle”,而不是“MySQL”。我建议你修复标签。

所以,如果它真的是 Oracle,那么一个选项可能是这样的:

create or replace function f_category
  (par_id in cars.id%type)
return boolean
is
  l_is_equal number;
begin
  select case when category = 'Luxury' then 1
              else 0
         end 
  into l_is_equal
  from cars
  where id = par_id;
  
  return l_is_equal = 1;
end;
/

虽然,在 SQL 中使用 returns 布尔值的函数有点困难,所以 - 也许您还想考虑 returns 一个数字的选项.将以前的功能转换为新版本很简单:

create or replace function f_category
  (par_id in cars.id%type)
return number
is
  l_is_equal number;
begin
  select case when category = 'Luxury' then 1
              else 0
         end 
  into l_is_equal
  from cars
  where id = par_id;
  
  return l_is_equal;
end;
/

现在您可以在 SQL 中使用它,例如

select f_category(par_id => 123) from dual;

select *
from cars
where f_category(id) = 1;