簡體   English   中英

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。 我沒有創建一個額外的表,因為我被告知,如果他們與員工是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.

我如何才能將值輸入管理器列?

我希望我的問題不要太模糊。

在添加下屬之前,您需要確保經理在那里。

可以使用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嗎? 如果您刪除經理,那么他們的所有員工也將被刪除。]

你的問題很完美。

您是否考慮暫時禁用FK_Manager約束,以便添加頂級管理? 然后在添加下一級員工時啟用約束?

只是一個想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM