在oracle中,布尔类型BOOLEAN是不允许在SQL中出现的,但是可以在PL/SQL中定义并使用。
--1)在匿名块中的使用
CREATE OR REPLACE FUNCTION vaild_emp(emp_no number)
--判断某个雇员号是否在EMP表中存在,若存在则返回TRUE,不存在则返回FALSE
RETURN BOOLEAN--注意函数的返回类型为布尔类型。
AS
v_temp INT;
BEGIN
SELECT 1 INTO v_temp FROM emp WHERE empno=emp_no;
RETURN TRUE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN FALSE;
END;
-----------------------------------这个函数就相当于定义了你自己要使用的布尔变量
DECLARE
v_ret BOOLEAN;
BEGIN
v_ret := vaild_emp(7369);---7369调用刚定义的函数传递的实参
if v_ret then
dbms_output.put_line('true');
else
dbms_output.put_line('false');
end if;
end;
--2)在触发器中使用
CREATE OR REPLACE FUNCTION vaild_stuno(v_stuno NUMBER)
--说明:该函数用于当想要删除 入党申请书递交详情中的记录的时候,先到上党校情况中去查看是否有该同学的记录
--若有,则返回true,若无,则返回false;
RETURN BOOLEAN
AS
v_temp NUMBER;
BEGIN
SELECT 1 INTO v_temp FROM 上党校情况 WHERE stu_no=v_stuno;
RETURN TRUE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN FALSE;
END;
CREATE OR REPLACE TRIGGER PAR_CLA_INFO_BETRI
BEFORE DELETE ON 入党申请书递交详情
FOR EACH ROW
DECLARE
v_ret BOOLEAN;
BEGIN
v_ret:=vaild_stuno(:old.stu_no);--:OLD.STU_NO为删除前的学生的学号,为传递给函数VAILD_STUNO的实参
IF v_ret THEN
raise_application_error(-20002,'不允许删除该同学的记录。请先删除该流程之后的所有流程中,该同学的记录!');
ELSE
UPDATE youth_league_branch SET sub_no='0' WHERE stu_no=:OLD.stu_no;
END IF;
END;