|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : février 2003 Messages : 148 ![]() |
Bonjour,
Comment fait-on pour limiter le nombre d'enregistrement dans une table par exemple 250? merci d'avance A+ Laurent |
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 349 ![]() |
CDLT.
|
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : février 2003 Messages : 148 ![]() |
tu peux m'en dire plus, je ne sais pas ou placer ce code et est-ce que je garde les 250 derniers enregistrements ?
|
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 349 ![]() |
je ne sais pas s'il y a une logique dans ta demande .
Néanmois pour traiter le cas présent, dans la table visée : 1. Créer une sequence et alimenter une colonne de ta table avec le contenu de la séquence à travers une trigger... 2. Dans ce même trigger, tu pourras toujours faire un delete du 1er enregistrement ( min(id_seq)) si count(*) = 250 ... Il y a peut-être d'autres solutions $ .... CDLT. |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Responsable d'exploitation informatique Inscription : mars 2005 Messages : 437 ![]() |
moi je trouve çà bien compliqué, et pas du tout apte à durer ... tu fais quoi si du jour au lendemain on te dit ; fianlement il fallait prendre 300 enregistrements ; t'en as perdu 50 !!!
pourquoi ne pas limiter l'extraction / la requête à 250 rows, tout simplement ?? t'as toujours toutes tes données, et voilà ...
__________________
apprenti sorcier Oracle & boulet intérimaire... http://www.courtois.cc/murphy/murphy_informatique.html |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : février 2003 Messages : 148 ![]() |
J'ai surement mal expliqué ma requete :
Je veux creer une table qui contient au maximum 250 enregistrements. le 251 ieme evenement est supprimé de lcette table. Cordialement, |
|
|
00
|
|
|
#7 |
![]() Salim Développeur et DBA Oracle Inscription : octobre 2006 Messages : 872 ![]() |
Salut ,
Tu fais un trigger sur ta table before insert et tu comptes le nombre de tes enregistrements si dépasse 250, tu géres l'exception. |
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Ou alors tu crées la table avec 250 enregistrements vide et tu enlèves les droits INSERT
|
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
La solution du trigger ne marche pas dans le cas de transactions concurrentes car chaque transaction ne peut pas voir ce que les autres transactions sont en train de faire. Une solution plus fiable semble être l'utilisation d'une vue matérialisée et d'une contrainte sur cette vue.
Voir la discussion sur le forum OTN (en anglais). |
|
|
00
|
|
|
#10 | ||
![]() Salim Développeur et DBA Oracle Inscription : octobre 2006 Messages : 872 ![]() |
Bonjour,
On peux résoudre se problème, dans le triger on fait un select ... for update no_wait sur la table exemple Code :
|
||
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Mais si la ligne n'existe pas (si une transaction en train de créer une ligne avec un INSERT dans une transaction en cours, une transaction concurrente qui fait un SELECT ne peut pas voir cette nouvelle ligne), elle ne peut pas être verrouillée ... Cela peut marcher si on pose un verrou exclusif sur toute la table: dans ce cas, on sérialise toutes les mises à jour (INSERT, UPDATE, DELETE) sur la table.
|
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Et puis faire un select sur la table traitée par le trigger, tu vas te trouver avec une belle erreur ORA-04091 dite erreur de la table mutante.
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#13 |
|
Nouveau Membre du Club
![]() Inscription : février 2003 Messages : 148 ![]() |
J'ai mis en place une sequence et un trigger sur insert, je delete la ligne de rang n-250 et j'insere la nouvelle. Je pense avoir de la chance, car je n'ai qu'un prog qui alimente ma table.
Merci |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com