我不知道怎么开始!! 我在oracle数据库中有一个工作,它是关于触发器和约束的... 工作是在hokey联盟数据库的某些表上创建触发器和约束... 因为我是新手,而且不熟悉触发器我有很多错误!!!
让我们以这两个表为例:
1 /“equipe”(指团队)表:
- (NSInteger)winningNumber {
do{
_winningNumber = arc4random() %10 +1;
}
while (_winningNumber ==5);
return _winningNumber;
}
2 /“joueur”(指玩家):
UIButton
其中:
“id_eq”和“id_jou”是主键。
“joueur.id_eq”被引用为“equipe.id_eq”。
“equipe.id_capitaine”引用“joueur.id_jou”。
我想创建一个触发器,如果用户插入或更新“equipe”表,其中“capitaine”不是团队中的玩家(“equipe”),则写入msg的错误,我尝试了很多, buttt ...总是信息:
Name Null? Type
----------------------------------------- -------- ----------------------------
ID_EQ NOT NULL NUMBER(6)
NOM VARCHAR2(50)
ENREGISTRMENT VARCHAR2(50)
ID_LIG NUMBER(6)
ID_CAPITAINE NUMBER(6)
ID_ENT NUMBER(6)
这是触发器之一,如果有人可以找到错误并修复它,或建议更好的错误:
Name Null? Type
----------------------------------------- -------- ----------------------------
ID_JOU NOT NULL NUMBER(6)
NUMERO NUMBER(4)
POSITION VARCHAR2(50)
ID_EQ NUMBER(6)
如果您对触发器有一些很好的参考,那么对于那些大型的人来说,请使用pl / sql Oracle吧!
谢谢;)
答案 0 :(得分:0)
当然,还有其他方法可以实现您的逻辑,但如果您想使用触发器,以下内容适用于我
创建设备:
CREATE TABLE equipe
( ID_EQ number(6) not null,
NOM varchar2(50),
ENREGIS number(6),
ID_CAPITAINE number(6),
ID_ENT number(6),
CONSTRAINT equipe_pk PRIMARY KEY (ID_EQ)
);
创建joueur:
create table joueur
(ID_JOU number(6) not null,
NUMERO number(4),
POSITION varchar2(50),
ID_EQ number(6),
CONSTRAINT joueur_pk PRIMARY KEY (id_jou)
);
使用外键更改两者:
alter table equipe add(CONSTRAINT fk_equipe
FOREIGN KEY (ID_CAPITAINE)
REFERENCES joueur(ID_JOU));
alter table joueur add(CONSTRAINT fk_joueur
FOREIGN KEY (id_eq)
REFERENCES equipe(ID_EQ));
创建触发器:
CREATE OR REPLACE TRIGGER capitaine_in_equipe
before UPDATE OR INSERT ON equipe
FOR EACH ROW
DECLARE
id_p joueur.id_eq%TYPE;
BEGIN
if (:new.id_capitaine is not null ) then
SELECT id_eq INTO id_p
FROM joueur
WHERE id_jou = :new.id_capitaine;
IF ( id_p != :new.id_eq ) THEN
raise_application_error(-20100,' the captain is not a player of the team');
END IF;
END IF;
END;
请注意,在表定义中,您提到了一列id_capitaine
。在触发器中,您使用了名称iq_capitaine
。我不确定这是否反映了您的真实代码或仅仅是一个错字。