我无法在网上找到解决方案。 我想知道如何在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。 我没有创建一个额外的表,因为我被告知,如果他们与员工是1对多,那么我可以将FK放在表中。

现在我插入一个像这样的值:

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 db返回错误:

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.

我如何才能将值输入管理器列?

我希望我的问题不要太模糊。

#1楼 票数:2 已采纳

在添加下属之前,您需要确保经理在那里。

可以使用NULL管理器添加CEO / Manager / Owner:

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 :你真的想在外键上使用ON DELETE CASCADE吗? 如果您删除经理,那么他们的所有员工也将被删除。]

#2楼 票数:1

你的问题很完美。

您是否考虑暂时禁用FK_Manager约束,以便添加顶级管理? 然后在添加下一级员工时启用约束?

只是一个想法。

  ask by Maxime de Lange translate from so

未解决问题?本站智能推荐:

2回复

Oracle - 无法在现有表上创建新的FK

我确信我必须做一些非常愚蠢的事情,因为在现有的表中添加新的外键并不困难。 但是,我仍然被卡住了。 这就是我正在做的事情。 首先,我在TPM_USER创建了一个新列,用于存储用户所在的团队: 这可以正常工作,我可以查询TPM_USER表以查看是否添加了新列。 接下来,我希望TE
1回复

使用Oracle数据库11g中的触发器插入依赖表

例如,我正在使用3个表: A,B和C 我在表A上创建一个触发器。 因此,在触发器内部,我将一条记录插入到表B中 (作为C的母版),然后,我需要将另一条记录插入到表C中 。 我在A表上使用触发器,因为我需要使用A表中的值来创建表B中的记录,然后使用信息将新记录插入表C中 。 在
2回复

如何从Oracle中的后代值过滤分层查询中选择行?

鉴于表 我正在尝试做的是查询此表并从级别1(建筑物)获取所有项目,但我需要做的是通过返回具有包含特定值的子项的那些来过滤此返回集。 以下查询是我到目前为止返回的百思买,沃尔玛和亚马逊 我想做的是获得一个返回,其中一个后代有一个对象的子类型和一个子的macbook ,因此从我的查
2回复

递归查询设计-Oracle SQL

我希望创建一个能够将一系列补货完全映射到顶级需求的递归查询。 以下是有关我的问题陈述的一些详细信息: 我正在尝试设计一个递归解决方案,以计算所有后续补货(及其水平)给出的最高要求,其中要求定义为生产订单或计划订单( MIN类型) 我使用以下查询创建了此SQLFIDDLE
2回复

Oracle(11g之前)中可能的递归查询以连接嵌套的字符串值

我有一个关于表中多行注释的问题,我需要通过SQL将其提取为单个字符串。 我有两个表:测试和注释。 这是我想要的每个具有所需结果集的示例数据: 老实说,我什至不确定如果没有PL / SQL或某种形式的外部编程语言,是否可以找到所需的内容。 我一直在和connect by争吵,没有运气
1回复

Oracle 12c至11g

我设计了一个连接到oracle 12c服务器的Windows窗体应用程序。 一切都很棒,直到我发现客户端具有32位操作系统,并且oracle c只能安装在64位操作系统上。 我已经尝试了一周的时间来使我的应用程序适应oracle 11g,因为该版本可以安装在客户的计算机上,这已成为无望的
2回复

在 oracle 11g 中删除和重新创建外键约束所需的权限

我的用户名(schema1) 应该具有什么权限才能删除引用表 2(schema2) 的 Table_1(schema2) 上的外键约束? 我应该如何检查我是否拥有这些权限? 如果我不这样做,我必须从 SYSDBA 角色发出什么 GRANT 语句,以便我的用户名能够删除并重新创建表上的约束。
1回复

从Oracle 10g到11g的查询

我正在使用Oracle 11g开发自动化。 我有以下查询可以在oracle 10g上正常运行,但不能在11上运行。