oracle 11g中递归关系的表示法是什么?
What is the notation of recursive relation in oracle 11g?
我在网上找不到解决方案。我想知道如何在 oracle 中编写递归关系。目前这是我得到的:
create table medewerkers
(medewerker_ID varchar(15) primary key,
naam varchar(50) not null,
adres varchar(50) not null,
telefoon_nummer varchar(10) not null,
salaris number(4) not null,
functie varchar(50) not null,
manager varchar(15) constraint FK_Manager references medewerkers (medewerker_ID) on delete cascade,
werknemer_winkel_nummer number(15) constraint FK_W_winkel references winkel (winkel_nummer) on delete cascade,
constraint check_salaris check (salaris < 3000)
);
目前我为此递归关系创建了一个经理列作为 FK。我没有创建额外的 table,因为有人告诉我,如果他们与员工一对多,那么我可以将 FK 放在 table.
中
现在我要插入一个这样的值:
insert into MEDEWERKERS (medewerker_id, naam, adres, telefoon_nummer, salaris, functie, werknemer_winkel_nummer, manager)
values(11159112, 'Joost', 'Eindhoven Langloopstraat 1', 0678765478, 1500, 'baliemedewerker', 10, 'nee');
Oracle 数据库返回错误:
SQL Error: ORA-02291: integrity constraint (MAXIME.FK_MANAGER) violated - parent key not found
02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found"
*Cause: A foreign key value has no matching primary key value.
*Action: Delete the foreign key or add a matching primary key.
我还应该如何将值输入经理列?
希望我的问题不要太含糊。
你的问题很完美。
您是否考虑过暂时禁用 FK_Manager 约束,以便添加顶级管理?然后在添加下一级员工时启用约束?
只是一个想法。
在添加下属之前,您需要确保经理在场。
CEO/Manager/Owner 可以添加 NULL
经理:
INSERT INTO MEDEWERKERS (medewerker_id, naam, adres, telefoon_nummer, salaris, functie, werknemer_winkel_nummer, manager)
VALUES ( 'nee', 'The Boss Man', 'Home Office', '0000000001', 9999, 'Owner', 10, NULL );
然后可以使用正确的外键引用添加员工(根据 OP)。
此外 - 如果您输入的电话号码前导 0,那么您可能希望将数据用引号引起来 ''
否则您可能会发现从数字到 varchar 的转换会丢失它。
[顺便说一句:你真的想要 ON DELETE CASCADE
外键吗?如果您删除经理,那么他们的所有员工也将被删除。]
我在网上找不到解决方案。我想知道如何在 oracle 中编写递归关系。目前这是我得到的:
create table medewerkers
(medewerker_ID varchar(15) primary key,
naam varchar(50) not null,
adres varchar(50) not null,
telefoon_nummer varchar(10) not null,
salaris number(4) not null,
functie varchar(50) not null,
manager varchar(15) constraint FK_Manager references medewerkers (medewerker_ID) on delete cascade,
werknemer_winkel_nummer number(15) constraint FK_W_winkel references winkel (winkel_nummer) on delete cascade,
constraint check_salaris check (salaris < 3000)
);
目前我为此递归关系创建了一个经理列作为 FK。我没有创建额外的 table,因为有人告诉我,如果他们与员工一对多,那么我可以将 FK 放在 table.
中现在我要插入一个这样的值:
insert into MEDEWERKERS (medewerker_id, naam, adres, telefoon_nummer, salaris, functie, werknemer_winkel_nummer, manager)
values(11159112, 'Joost', 'Eindhoven Langloopstraat 1', 0678765478, 1500, 'baliemedewerker', 10, 'nee');
Oracle 数据库返回错误:
SQL Error: ORA-02291: integrity constraint (MAXIME.FK_MANAGER) violated - parent key not found
02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found"
*Cause: A foreign key value has no matching primary key value.
*Action: Delete the foreign key or add a matching primary key.
我还应该如何将值输入经理列?
希望我的问题不要太含糊。
你的问题很完美。
您是否考虑过暂时禁用 FK_Manager 约束,以便添加顶级管理?然后在添加下一级员工时启用约束?
只是一个想法。
在添加下属之前,您需要确保经理在场。
CEO/Manager/Owner 可以添加 NULL
经理:
INSERT INTO MEDEWERKERS (medewerker_id, naam, adres, telefoon_nummer, salaris, functie, werknemer_winkel_nummer, manager)
VALUES ( 'nee', 'The Boss Man', 'Home Office', '0000000001', 9999, 'Owner', 10, NULL );
然后可以使用正确的外键引用添加员工(根据 OP)。
此外 - 如果您输入的电话号码前导 0,那么您可能希望将数据用引号引起来 ''
否则您可能会发现从数字到 varchar 的转换会丢失它。
[顺便说一句:你真的想要 ON DELETE CASCADE
外键吗?如果您删除经理,那么他们的所有员工也将被删除。]