我有一个从表中检查年龄的SQL函数。当我运行函数时,我不断得到无效的数据类型错误。数据类型是相同的,错误出现在CHECK_30开始的列。我的功能也能正常运行。ORA-00902:无效的数据类型00902. 00000 -无效的数据类型;*原因:
*行动:Line: 1 Column: 8
CREATE OR REPLACE FUNCTION CHECK_30(LASTNAME staff03.lname%type)
RETURN BOOLEAN
IS
dofb staff03.dob%type;
cursor c1 is
SELECT dob
FROM staff03
WHERE lname = LASTNAME;
BEGIN
open c1;
fetch c1 into dofb;
close c1;
IF dofb < '1992-11-15' THEN
DBMS_OUTPUT.PUT_LINE('Older than 30');
RETURN TRUE;
ELSE
DBMS_OUTPUT.PUT_LINE('Young in');
RETURN FALSE;
END IF;
END;
SELECT CHECK_30('NELSON') from dual;
Oracle SQL目前没有布尔数据类型(从21c版本开始),因此您不能调用从SQL查询返回布尔值的函数。只能在PL/SQL代码中使用。
所以你不能这样做,因为SQL不能处理结果:
select check_30('NELSON') from dual;
,但是你可以在PL/SQL过程/函数/包/类型中这样做:
if check_30('NELSON') then
dbms_output.put_line('Check passed');
end if;