无法在 CHECK CONSTRAINT 中引用自定义函数
can't reference a custom function in a CHECK CONSTRAINT
我有一个 table 的列必须小于某个值,问题是这个值存储在另一个 table 中所以我无法引用它所以经过一些研究我发现我可以使用一个函数并在检查约束中调用它,这是我的函数
create or replace FUNCTION check_caution(id_cont in NUMBER)
return number
as res number ;
begin
select amount_contract*caution_offre_f*0.01 into res from contract
where id_contract=id_cont;
return res;
end check_caution;
该功能运行良好,我对其进行了测试。
这是我的 CHECK CONSTRAINT
alter table caution_exe
add CONSTRAINT check_amount
check (caution_exe.amount_caution<=check_caution(caution_exe.id_contract));
但这是我尝试添加后收到的消息
ORA-00904: "CHECK_CAUTION": invalid identifier
00904. 00000 - "%s: invalid identifier"
由于您无法在 check
约束中引用您自己的函数,因此创建一个 触发器 来完成这项工作。像这样:
CREATE OR REPLACE TRIGGER trg_biu_cauexe
BEFORE INSERT OR UPDATE
ON caution_exe
FOR EACH ROW
BEGIN
IF :new.amount_caution <= check_caution (:new.caution_exe.id_contract)
THEN
raise_application_error (-20000, 'Not allowed');
END IF;
END;
我有一个 table 的列必须小于某个值,问题是这个值存储在另一个 table 中所以我无法引用它所以经过一些研究我发现我可以使用一个函数并在检查约束中调用它,这是我的函数
create or replace FUNCTION check_caution(id_cont in NUMBER)
return number
as res number ;
begin
select amount_contract*caution_offre_f*0.01 into res from contract
where id_contract=id_cont;
return res;
end check_caution;
该功能运行良好,我对其进行了测试。 这是我的 CHECK CONSTRAINT
alter table caution_exe
add CONSTRAINT check_amount
check (caution_exe.amount_caution<=check_caution(caution_exe.id_contract));
但这是我尝试添加后收到的消息
ORA-00904: "CHECK_CAUTION": invalid identifier
00904. 00000 - "%s: invalid identifier"
由于您无法在 check
约束中引用您自己的函数,因此创建一个 触发器 来完成这项工作。像这样:
CREATE OR REPLACE TRIGGER trg_biu_cauexe
BEFORE INSERT OR UPDATE
ON caution_exe
FOR EACH ROW
BEGIN
IF :new.amount_caution <= check_caution (:new.caution_exe.id_contract)
THEN
raise_application_error (-20000, 'Not allowed');
END IF;
END;