solution erreur ORA-01752

Musée des erreurs Ajouter un commentaire

SQL> Connect scott / Tiger
SQL> create view v_emp as select *
from emp,dept
where emp.deptno=dept.deptno;
SQL> delete from v_emp
-> 14 rows deleted

La suppression de lignes à travers une vue (même avec jointure)  fonctionne !
La condition, qui est vérifiée ici,  est qu’il y ait une clé primaire sur la table maitre de la jointure


SQL> select constraint_name, constraint_type,  table_name
from user_constraints;

CONSTRAINT_NAME  C TABLE_NAME
---------------  - ----------
PK_EMP          P EMP
PK_DEPT      P DEPT
FK_DEPTNO      R EMP

Supprimons la PK de EMP :

SQL> alter table emp disable constraint pk_emp
SQL> delete from v_emp
-> OK

(car on a supprimé la contrainte sur la table détail°

PAR CONTRE  si on invalide (ou supprime)  la contrainte unique de la table maitre

SQL> — on invalide d’abord la clé étrangère de EMP avant la clé primaire de EMP sinon ca marche Pô
SQL> alter table emp disable constraint fk_deptno
SQL>  alter table dept disable constraint pk_dept
SQL> delete from v_emp
ERROR at line 1:
ORA-01752: cannot delete from view without exactly one key-preserved table

Conclusion : on peut faire des suppressions de lignes dans une table à travers une vue avec jointures MAIS
il faut une contrainte unique (ou une clé primaire) sur la table maitre…
sinon ORA-01752.

Accessoirement ORA-01752 :  cannot delete from view without exactly one key-preserved table

Veut bien dire…ce que ca veut dire.

Il y a apparemment un probleme de table sous jacente sans contrainte unique cqfd

Faire un commentaire