{Oracle} Aide sql Server
Fermé
adme
Messages postés
32
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
20 septembre 2011
-
21 août 2009 à 23:18
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 - 22 août 2009 à 13:13
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 - 22 août 2009 à 13:13
A voir également:
- {Oracle} Aide sql Server
- Ps3 media server - Télécharger - Divers Réseau & Wi-Fi
- Filezilla server - Télécharger - Téléchargement & Transfert
- Mysql community server - Télécharger - Bases de données
- Serviio media server - Télécharger - TV & Vidéo
- Datediff oracle ✓ - Forum Oracle
2 réponses
Salut
tu ne peux pas contrôler un nombre maxi d'occurrences de valeur avec un trigger : comme la table est "en cours de modification" tu ne peux pas lancer un quelconque comptage sur les données qu'elle contient.
tu es obligé de passer par une procédure qui va compter le nombre d'occurrences pour la valeur reçue et
- générer une exception si le comptage dépasse le seuil que tu fixeras
- insèrera effectivement tes données dans la table
tu ne peux pas contrôler un nombre maxi d'occurrences de valeur avec un trigger : comme la table est "en cours de modification" tu ne peux pas lancer un quelconque comptage sur les données qu'elle contient.
tu es obligé de passer par une procédure qui va compter le nombre d'occurrences pour la valeur reçue et
- générer une exception si le comptage dépasse le seuil que tu fixeras
- insèrera effectivement tes données dans la table
Hélas, le trigger ne peut pas avoir bcp de conséquences
le trigger AVANT est souvent utilisé pour vérifier des prérequis et éventuellement déclencher une exception (les prérequis ne sont pas remplis) pour faire échouer la transaction
le trigger APRES est souvent utilisé pour répercuter des modifications ailleurs (cascade, synthèse) mais pas pour déclencher une exception car (il arrive APRES la modification dans la table)
Bien évidemment, les tables en cours de modification dans la transaction ne peuvent supporter aucune requête ni de consultation, encore moins de mise à jour.
le trigger AVANT est souvent utilisé pour vérifier des prérequis et éventuellement déclencher une exception (les prérequis ne sont pas remplis) pour faire échouer la transaction
le trigger APRES est souvent utilisé pour répercuter des modifications ailleurs (cascade, synthèse) mais pas pour déclencher une exception car (il arrive APRES la modification dans la table)
Bien évidemment, les tables en cours de modification dans la transaction ne peuvent supporter aucune requête ni de consultation, encore moins de mise à jour.
HostOfSeraphim
Messages postés
6750
Date d'inscription
jeudi 2 février 2006
Statut
Contributeur
Dernière intervention
31 juillet 2016
1 608
21 août 2009 à 23:39
21 août 2009 à 23:39
Justement, dans ce cas précis, ne pourrait-on pas avoir un trigger qui supprimerait la ligne ajoutée par "erreur" ?
Quoiqu'il en soit, le mieux serait d'intervenir au niveau de l'interface logicielle pour cette règle, avant l'insertion en base.
Quoiqu'il en soit, le mieux serait d'intervenir au niveau de l'interface logicielle pour cette règle, avant l'insertion en base.
Séquelle
>
HostOfSeraphim
Messages postés
6750
Date d'inscription
jeudi 2 février 2006
Statut
Contributeur
Dernière intervention
31 juillet 2016
22 août 2009 à 00:11
22 août 2009 à 00:11
Malheureusement non (en Oracle tout du moins, ailleurs je sais pas)
car pendant que la table est "en cours de modification" on n'a pas le droit de la requêter.
=> on ne peut pas compter le nombre d'occurrences
=> on peut encore moins supprimer quelque chose
on ne peut pas sélectionner des données car Oracle ne le veut pas (et j'ai jamais trop bien compris pourquoi - ni creusé d'ailleurs)
on ne peut pas ajouter, modifier ou supprimer des données car à ce moment là on aurait un serpent qui se mord la queue (insertion déclenche une suppression qui déclenche une insertion etc) et leurs ingé support passeraient leur temps à dispenser des cours de programmation :-(
donc on est obligé de faire avec... et le seul objet Oracle qui permette de contrôler des règles de gestion lors de manipulations de données c'est la procédure ! elle devient alors la seule interface de mise à jour de données de la table en question (on se doit donc alors de supprimer tous les droits de mise à jour à tout le monde, sys y compris)
car pendant que la table est "en cours de modification" on n'a pas le droit de la requêter.
=> on ne peut pas compter le nombre d'occurrences
=> on peut encore moins supprimer quelque chose
on ne peut pas sélectionner des données car Oracle ne le veut pas (et j'ai jamais trop bien compris pourquoi - ni creusé d'ailleurs)
on ne peut pas ajouter, modifier ou supprimer des données car à ce moment là on aurait un serpent qui se mord la queue (insertion déclenche une suppression qui déclenche une insertion etc) et leurs ingé support passeraient leur temps à dispenser des cours de programmation :-(
donc on est obligé de faire avec... et le seul objet Oracle qui permette de contrôler des règles de gestion lors de manipulations de données c'est la procédure ! elle devient alors la seule interface de mise à jour de données de la table en question (on se doit donc alors de supprimer tous les droits de mise à jour à tout le monde, sys y compris)
HostOfSeraphim
Messages postés
6750
Date d'inscription
jeudi 2 février 2006
Statut
Contributeur
Dernière intervention
31 juillet 2016
1 608
>
Séquelle
22 août 2009 à 00:15
22 août 2009 à 00:15
Je suppose alors que c'est la même chose avec SQL Server. Quoique le coup du serpent qui se mord la queue, ça serait bien le genre de SQL Server ! (j'ai déjà vu SQL Server aller droit dans le mur (plantage du moteur) en toute conscience, sans alerter l'utilisateur...)
Séquelle
>
HostOfSeraphim
Messages postés
6750
Date d'inscription
jeudi 2 février 2006
Statut
Contributeur
Dernière intervention
31 juillet 2016
22 août 2009 à 00:53
22 août 2009 à 00:53
J'aime bien être méchant vis à vis de Microsoft mais je connais si peu SQL Server que je n'en dirais pas du mal.
La seule chose qui est vraie est que comme c'est un produit Micorsoft, pas mal de monde se dit que c'est un produit plug and play, simple d'utilisation. Du coup, utilisateurs voire consultants bâclent la mise en œuvre du serveur et ça donne forcément une mauvaise image du produit. Quant aux perfs, je suppose que Microsoft a maintenant rattrapé son retard
La seule chose qui est vraie est que comme c'est un produit Micorsoft, pas mal de monde se dit que c'est un produit plug and play, simple d'utilisation. Du coup, utilisateurs voire consultants bâclent la mise en œuvre du serveur et ça donne forcément une mauvaise image du produit. Quant aux perfs, je suppose que Microsoft a maintenant rattrapé son retard
HostOfSeraphim
Messages postés
6750
Date d'inscription
jeudi 2 février 2006
Statut
Contributeur
Dernière intervention
31 juillet 2016
1 608
>
Séquelle
22 août 2009 à 13:13
22 août 2009 à 13:13
J'avais deux bugs qui m'avaient beaucoup surpris sur SQL Server 2005 :
- Le premier concernait un fichier .sql créé sur SQL Server Management Studio. Je ferme, je double-clique sur le fichier pour qu'il se lance avec SQL Server Management Studio... paf : chemin invalide. Curieux. Je réessaye : même chose. Au 7e essai, ça marche, SQL Server Management Studio accepte enfin de l'ouvrir. Je ferme le fichier, la session Windows, je retente : ça recommence... étrange.
- Le second concernait un déplacement de la base système tempdb, en TSQL (pas avec les outils graphiques). Premier essai, je mets un mauvais chemin vers la nouvelle destination, l'ordre ne passe pas et une erreur m'est retournée : normal, SQL Server ne va quand même pas accepter que les fichiers de la base soient dans un dossier inconnu de l'arborescence système... Second essai, je mets le bon chemin, mais j'omets de préciser les noms des fichiers de la base, je mets juste le chemin ; logiquement, ça ne doit pas passer, puisqu'on demande de remplacer C:\SQL\exemple par C:\SQL\, sans nom de fichier... donc ça n'a rien de cohérent... pourtant SQL Server valide l'ordre. Et évidemment, au redémarrage du moteur, il ne peut pas se lancer puisqu'il ne trouve pas les fichiers de la base tempdb. C'était pourtant prévisible, mais SQL Server m'a laissé aller dans le mur alors qu'il le savait...
- Le premier concernait un fichier .sql créé sur SQL Server Management Studio. Je ferme, je double-clique sur le fichier pour qu'il se lance avec SQL Server Management Studio... paf : chemin invalide. Curieux. Je réessaye : même chose. Au 7e essai, ça marche, SQL Server Management Studio accepte enfin de l'ouvrir. Je ferme le fichier, la session Windows, je retente : ça recommence... étrange.
- Le second concernait un déplacement de la base système tempdb, en TSQL (pas avec les outils graphiques). Premier essai, je mets un mauvais chemin vers la nouvelle destination, l'ordre ne passe pas et une erreur m'est retournée : normal, SQL Server ne va quand même pas accepter que les fichiers de la base soient dans un dossier inconnu de l'arborescence système... Second essai, je mets le bon chemin, mais j'omets de préciser les noms des fichiers de la base, je mets juste le chemin ; logiquement, ça ne doit pas passer, puisqu'on demande de remplacer C:\SQL\exemple par C:\SQL\, sans nom de fichier... donc ça n'a rien de cohérent... pourtant SQL Server valide l'ordre. Et évidemment, au redémarrage du moteur, il ne peut pas se lancer puisqu'il ne trouve pas les fichiers de la base tempdb. C'était pourtant prévisible, mais SQL Server m'a laissé aller dans le mur alors qu'il le savait...
21 août 2009 à 23:26