oracle - créer une vue avec une clé primaire
Cette question est double dans ce sens je n'ai encore à clarifier. Documentation Oracle spécifiquement dit qu'il est possible de spécifier une clé primaire dans CREATE VIEW
de l'alinéa(11g docs a la même notion) . Pourtant, quand j'essaie de le faire comme ceci:
create or replace view ABC(A, B, C, CONSTRAINT A_PK PRIMARY KEY (A)) ....
- Je obtenir ORA-00922: missing or invalid option
pointant sur "clé primaire" de la phrase. La question est, est-ce moi ou est-il quelque chose de mal avec la Documentation d'Oracle?
OriginalL'auteur Andrey Balaguta | 2012-02-06
Vous devez vous connecter pour publier un commentaire.
La réponse simple est que votre syntaxe est incorrecte. Vous doit spécifier
DISABLE
.NOVALIDATE
désactive la validation de la clé primaire, dans une vue par défaut et est donc inclus automatiquement; mais c'est beaucoup plus clair si vous l'utilisez, comme, dans une belle double négatif,disable novalidate
désactive la possibilité de désactiver la clé primaire.La
rely
est facultatif; il spécifie s'il faut prendre en compte la clé primaire lors de la création de la vue. L'antonyme derely
estnorely
.Il y a un grand nombre de restrictions sur la création d'une vue contrainte et qu'elle repose sur le tableau ci-dessous c'est pas vraiment la peine comme l'a déjà noté par @RC. Mais si vous en avez besoin pour la documentation alors seulement ici vous allez:
De la la documentation:
OriginalL'auteur Ben
Vous devez créer la contrainte comme un handicapé. C'est vraiment un moyen de donner un indice de l'optimiseur d'influencer le plan de requête.
L'intégrité des données est appliquée à la table sous-jacente. Quand vous pensez à ce sujet, l'application d'une contrainte de clé primaire au niveau de la vue ne fait pas beaucoup de sens. Une plaine ole vue n'est pas de stocker des données, c'est juste une "vue" de données fournies par d'autres tables. Si une contrainte de clé primaire est seulement placé sur une vue de certains sous-jacente de la table et de la table de ne pas appliquer la contrainte elle-même, comment la vue de gérer la situation où quelqu'un mise à jour de la table directement avec des données qui le casse de la contrainte? (la table n'a aucune idée de ce que les contraintes sont exercées sur elle par l'intermédiaire d'une vue)
OriginalL'auteur RC.