|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Otmane MALIH Inscription : décembre 2010 Messages : 22 ![]() |
Bonjour a tous,
Bon j'ai la table suivante Un batch remplit la table automatiquement, et pour la colonne chef, parfois elle ne contient que des espaces comme ' ', ce que je veux c'est remplacer ces espaces par un texte par défaut par exemple 'vide' Alors supposons que la ligne suivante est insérée j'aimerais avoir la ligne suivante dans ma table Je pense que les triggers Before Insert permettent de faire ça. A noter que les nombre d'espaces dans la colonne chef est généralement 3 espaces, mais je ne suis pas sûr s'elle peut contient plus ou mois d'espace ou même la valeur null Merci d'avance. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
'vide' c'est n'importe quoi. Mettez Null et modifiez le batch pour qu'il gère ça correctement.
|
|
|
10
|
|
|
#3 | |
|
Invité de passage
![]() Otmane MALIH Inscription : décembre 2010 Messages : 22 ![]() |
Citation:
Pour le batch, je ne peux pas le modifier. et pour la colonne chef, c'est une clé étrangère qui pointe vers une autre table chef. la table chef est comme suit: lorsque la colonne chef de Cllients contient vide, elle pointe vers une ligne dans la table chef. Ce qui n'est pas possible si elle est null. la table chef est alimentée par un autre batch, alors je ne peux pas mettre une ligne avec ref= ' '. Je ne sais pas si j'ai bien expliqué le problème, mais ce que je cherche c'est la façon de création d'un trigger qui permet de remplacer la valeur ' ' par une autre valeur 'xxx' chaque fois qu'une nouvelle ligne est insérée. J'ai déjà fait ça en MSSQL et je sais qu'il est possible de le faire en PL/SQl mais je n'arrive pas à le faire puisque je n'ai aucun expérience en PL/SQL. Merci. |
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
La valeur 'vide' de la table Chef est elle aussi du n'importe quoi.
Pour les triggers lisez "6. Les déclencheurs". |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Pour pallier à la valeur "vide" qui chagrine mnitu, ne pouvez-vous pas modifier le champ pour qu'il accepte les NULL ?
Même s'il y a une FK, Oracle acceptera alors la valeur NULL. |
|
|
00
|
|
|
#6 | ||
|
Invité de passage
![]() Otmane MALIH Inscription : décembre 2010 Messages : 22 ![]() |
Bon j'explique un peu plus.
Si la valeur de chef dans la table clients est égale à ' ', la jointure avec la table chef doit être avec une ligne. Si je mets des null à la place de ' ', je ne vais pas pouvoir faire une jointure entre les deux tables. Une autre raison: Si par exemple j'exécute la requête suivante Code :
exemple: nom, prénom,....,nom chef par défaut, prénom chef par défaut,... pour cela il y a déjà une ligne dans la table chef avec comme ref vide. |
||
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Supprimez 'vide', faites une jointure externe.
|
|
|
00
|
|
|
#8 | |||||||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Citation:
Et c’est là où réside la différence. Une contrainte qui ne s’évalue pas à FAUX peut avoir deux valeurs (a) VRAI ou (b) NULL. Ce qui veut dire qu’une clé étrangère peut être acceptée lorsqu’elle s’évalue à NULL. Voyant ceci en action: Code :
Code :
Pire encore, j'ai déclaré intentionnellement, le champ id de la table t_parent comme unique et non comme clé primaire pour montrer que je peux faire ceci aussi : Code :
|
|||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com