2014-06-08 3 views
0

Lors de la création de la table.ON DELETE SET DEFAULT - fonctionnalité non implémentée

Un messege d'erreur montre SQL Error: ORA-03001: unimplemented feature

CREATE TABLE OrgChart 
    (
    job_title VARCHAR(30) NOT NULL PRIMARY KEY, 
    emp_nbr INTEGER DEFAULT 0 NOT NULL REFERENCES Personnel(emp_nbr) ON 
    DELETE SET DEFAULT ON 
    UPDATE CASCADE, 
    boss_emp_nbr INTEGER REFERENCES Personnel(emp_nbr), 
    UNIQUE (emp_nbr, boss_emp_nbr), 
    salary DECIMAL (12,4) NOT NULL CHECK (salary >= 0.00) 
); 

Comment puis-je déclarer une clé étrangère qui permet des mises à jour de cascade de la table parent et qui définit la valeur par défaut (0 dans ce cas) lorsque le parent la ligne est supprimée?

+0

Avez-vous une question? –

+0

Question est ... pourquoi il est dit fonctionnalité inappliquée .. dans doc oracle c'est la syntaxe correcte 'http://docs.oracle.com/cd/E17952_01/refman-5.5-fr/create-table-foreign-keys. html' – Nisar

Répondre

4

Oracle ne prend pas en charge les mises à jour en cascade. Cela ne vous permet pas non plus de définir la valeur par défaut lorsque la ligne parente est supprimée. Vos deux options pour un comportement on delete sont cascade ou set null. Évidemment, il ne serait pas logique de définir un comportement set null si vous voulez que la colonne soit déclarée not null.

En général, les clés primaires doivent être immuables. Vous ne devez généralement pas déclarer une colonne en tant que clé primaire si vous avez l'intention d'autoriser sa mise à jour. Si emp_nbr doit changer (ce qui semble étrange), vous voulez probablement une clé primaire différente. Il me semble aussi étrange que vous vouliez qu'un employé reste dans la table OrgChart si l'employé a été supprimé. Si vous souhaitez autoriser un organigramme à avoir une place sans employé, vous voudrez probablement autoriser la valeur emp_nbr à être nulle dans OrgChart et déclarer la clé étrangère à on delete set null.

Questions connexes