【发布时间】:2020-05-05 11:20:27
【问题描述】:
我想要一个触发器,一个给定项目的工作人员不超过 3 人 .
create or replace trigger t_maxim_empleats_projecte
before insert or update of codi_proj
on empleats
for each row
declare
contador number(5);
begin
select count(codi_proj) into contador from empleats where codi_proj= :new.codi_proj;
if contador > 3 then
RAISE_APPLICATION_ERROR(-20000, 'No poden haver-hi més de 3 empleats en un
mateix projecte.');
end if;
end;
这就是我的 SQL 表中的全部内容:
create table Projectes(
codi_proj number(5),
nom_proj varchar2(25),
pressupost number(10,2),
primary key (codi_proj)
);
create table Empleats(
codi_emp number(5),
nom_emp varchar2(15),
sou number(10,2),
codi_dept number(5),
codi_proj number(5),
data_alta date,
primary key (codi_emp),
foreign key (codi_dept) references Departaments(codi_dept) on delete set null,
foreign key (codi_proj) references Projectes(codi_proj) on delete set null
);
insert into projectes(codi_proj, nom_proj, pressupost)
values (1, 'Daisy', 240000);
insert into projectes(codi_proj, nom_proj, pressupost)
values (2, 'CLAM', 63000);
insert into projectes(codi_proj, nom_proj, pressupost)
values (3, 'Vocal Processor', 600000);
insert into empleats(codi_emp, nom_emp, sou, codi_dept, codi_proj,data_alta)
values (1, 'Maria', 21000, 1, 1,TO_DATE('10/10/1980','dd/mm/yyyy'));
insert into empleats(codi_emp, nom_emp, sou, codi_dept, codi_proj,data_alta)
values (2, 'Josep', 18000, 1, 1,TO_DATE('01/08/1982','dd/mm/yyyy'));
insert into empleats(codi_emp, nom_emp, sou, codi_dept, codi_proj,data_alta)
values (3, 'Ramon', 48000, 4, 2,TO_DATE('05/04/2005','dd/mm/yyyy'));
【问题讨论】:
-
“有时有效,有时无效”。您需要使用受控数据集运行一些测试。一旦您了解了表格的起始状态,您就可以调查哪些输入有效,哪些无效,然后您应该了解如何解决您的问题。此外,如果您只是说“有时有效,有时无效”,对我们帮助不大。您需要描述它是如何不起作用的:会发生什么?你得到一个你没想到的错误吗?还是没有收到您希望的错误?
-
您可能会发现this answer to a previous question 提供了一些见解。
-
请查看答案和反馈。
标签: sql oracle plsql database-trigger