Bonjour
j'ai une table T partitionnée et je souhaite réactiver une contrainte d'intégrité uniquement pour les lignes d'une partition spécifique.
Est-ce possible ?
Bonjour
j'ai une table T partitionnée et je souhaite réactiver une contrainte d'intégrité uniquement pour les lignes d'une partition spécifique.
Est-ce possible ?
Je ne pense pas. A ma connaissance la contrainte se définie au niveau de la table et elle est toujours globale.
OK , donc en gros pas d'astuce pour cette "contrainte technique" imposée par le SGBD ?
Certainement
Une contrainte peut être activée en présence des données incorrectes du point de vue de la contrainte et je me suis dit que peut être cela pouvait vous aider dans un scénario assez spécifique ou peut être que non.
Sinon peut être que vous pouvez utiliser un trigger à sa place ou bien peut être non.
Peut être qu'une vue matérialisée est envisageable et dans ce cas la contrainte pourrais être déplacée sur cette vue ou bien peut être que non.
Il est possible que vous puissiez simuler cela à l'aide d'une contrainte CHECK utilisant une UDF faisant appel aux tables système. Cependant j'y voit deux écueils :
1) les utilisateurs qui vont faire des mises à jours devront avoir des privilèges suffisant pour lire les tables système
2) je ne suis pas sûr qu'Oracle garantisse la validité d'exécution d'une UDF dans les contraintes CHECK lorsque les UDF font appels à des tables autres que la table cible de la contrainte.
Une autre façon plus propre de faire est d'utiliser un déclencheur, mais le 1) sera toujours d'actualité !
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Restrictions on Check Constraints
...
Conditions of check constraints cannot contain the following constructs:
Subqueries and scalar subquery expressions
Calls to the functions that are not deterministic (CURRENT_DATE, CURRENT_TIMESTAMP, DBTIMEZONE, LOCALTIMESTAMP, SESSIONTIMEZONE, SYSDATE, SYSTIMESTAMP, UID, USER, and USERENV)
Calls to user-defined functions
...
donc déclencheur encapsulant la logique avec accès aux tables systèmes => privilèges particulier d'accès aux tables systèmes pour tous les utilisateurs de la base faisant des INSERT/UPDATE sur cette table ou cette partition.
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Je ne vois pas trop ce que vous voulez chercher dans les "tables systèmes". Mais si on s'imagine qu'il y a quelque chose à chercher c'est seulement l'utilisateur propriétaire du trigger qui devrait recevoir les privilèges en question.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager