oracle - Oracle - 如何正确调用布尔函数
问题描述
我在执行布尔函数闰年时遇到问题。我已经修改它以返回一个布尔值,但我似乎知道如何正确调用它。
create or replace function leapyear(year IN NUMBER)
RETURN BOOLEAN IS
BEGIN
IF TO_CHAR(LAST_DAY(TO_DATE('01/02/'||year, 'dd/mm/yyyy')), 'DD') = 29 THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END;
函数编译,但问题是如何执行它:这显示“表达式类型错误”错误
DECLARE
leapy varchar2(10);
BEGIN
SELECT leapyear(1600) into leapy from dual;
dbms_output.put_line(leapy);
END;
解决方案
例如:
SQL> set serveroutput on;
SQL> begin
2 if leapyear(1600) then
3 dbms_output.put_line('Leap year');
4 else
5 dbms_output.put_line('Not leap year');
6 end if;
7 end;
8 /
Leap year
PL/SQL procedure successfully completed.
或者:
SQL> begin
2 dbms_output.put_line(case when leapyear(1600) then 'Leap year'
3 else 'Not leap year'
4 end);
5 end;
6 /
Leap year
PL/SQL procedure successfully completed.
SQL>
基本上,如果您想在纯 SQL 中使用该函数(即不在 PL/SQL 中),您宁愿返回其他内容,例如
- NUMBER(0 为假,1 为真)
- VARCHAR2(N 为假,Y 为真
或类似的。布尔值——作为数据类型——在 SQL 层中不存在,这使得它很难使用。
推荐阅读
- c++ - 使用 cin 不接受 C++ 输入
- java - java.library.path 中没有 pytorch_jni
- python - 从beeline配置pyhive
- arrays - 如何使用solidity在remix IDE中的数组中插入用户输入数据?
- c++ - 为什么会跳过 Switch 语句?
- c++ - 如何有条件地编写依赖于 C++ 中 lambda 的返回类型的代码?
- r - 使用 purrr 地图在日期上嵌套循环
- html - 进入 Flexbox
- python - 在 luigi 中使用 task_namespace 会产生错误
- javascript - 在鼠标悬停时更改 img