首页 > 解决方案 > 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;

标签: oraclefunction

解决方案


例如:

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 层中不存在,这使得它很难使用。


推荐阅读