|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 31 ![]() |
Bonjour,
Dans le cadre d'un nettoyage d'une base de données Oracle, je dois effectuer des contrôles de cohérence entre deux tables. Un comptage entre deux tables ne suffit pas à affirmer qu’il y a du « un pour un » entre ces deux tables. C'est à dire que l’égalité du nombre de postes ne permet pas d’affirmer qu’il s’agit de la même liste de références. Par conséquent, il faut bien effectuer les requêtes de sélection en utilisant l'ordre "minus" dans les deux sens. Je souhaite également, à la suite de ces requêtes de sélection, mettre à jour un indicateur de cohérence dans une table (champ "INDCOHAV" de la table CPT_PURGE). Voici le code associé que je cherche à faire: Code sql :
Cela me retourne l'erreur suivante: Citation:
Bonne journée. Olivier |
|||
|
|
00
|
|
|
#2 |
![]() ![]() |
Il faut doubler les apostrophes lorsqu'on construit une chaîne de caractère entre apostrophe justement :
Code :
EXECUTE IMMEDIATE 'UPDATE CPT_PURGE SET INDCOHAV=0 WHERE NOMTABLE=''SIG_RECO05''';
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#3 |
|
Membre Expert
![]() Philippe CHIRCOPChef de projet Inscription : juin 2007 Messages : 1 109 ![]() |
Il faut doubler les quotes !
Code :
EXECUTE IMMEDIATE 'UPDATE CPT_PURGE SET INDCOHAV=0 WHERE NOMTABLE=''SIG_RECO05''';
__________________
Garuda गरूड Brahmâ la Guerre et Vishnu la Paix Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010 |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Forcément, un select into variable ne doit renvoyer qu'une seule ligne
Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 31 ![]() |
Merci pour vos réponses.
Je regarde et teste les différentes remarques. Cdlt, Olivier |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Code :
|
||
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 31 ![]() |
Effectivement, il fallait doubler les apostrophes pour que le libellé de la table soit reconnu.
De même, comme le nom de ta table est connu, j'ai essayé en enlevant le "execute immediate" et ça fonctionne tout aussi bien. Merci à Waldar, Garuda et McM pour toutes ces bonnes remarques qui m'ont permis de débloquer la situation. Pour l'idée de mnitu, je vais regarder ce que ça donne, mais la solution précédente me sied déjà très bien. Bonne journée. Cdlt, Olivier |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 31 ![]() |
A mnitu:
Merci pour l'idée de la jointure externe, ça répond bien à ce que j'ai à faire. Par contre, serait-il possible d'avoir quelques précisions: - que signifie le %TYPE dans la déclaration de variable ? - comment comprendre la notion de table DUAL ? Pour le reste, voici ce que j'ai compris et corrigez-moi le cas échéant: - par rapport au LEFT/RIGHT OUTER JOIN qui regarde les éléments manquants de l'une ou l'autre des tables impactées, le FULL OUTER JOIN prend en compte les occurrences manquantes des deux tables à la fois, - le rowid est l'occurrence au niveau structure de la table et si celui-ci est nul, alors cela signifie, après la jointure effectuée, qu'il existe des occurrences manquantes dans une table par rapport à l'autre, - et enfin d'après la requête, cela signifie que le résultat (INDCOHAV) pourra prendre comme valeur 0 (cad qu'il y a exactement les mêmes valeurs dans les deux tables), mais également 1, 2, 3,... selon le nombre d'occurrences (rowid) remontées par la requête. Merci d'avance pour les réponses et les éclaircissements à ma compréhension. Bonne soirée. Cdlt, Olivier |
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
%type : prend la définition de ta colonne en base. Comme ça si ça change (genre un varchar2(50) qui passe en varchar2(100)), tu n'as pas besoin de modifier toutes tes procédures, scripts, etc.. Pratique pour la maintenance, mais moins lisible.
DUAL : Table systeme qui ne contient qu'une seule ligne, une seule colonne. Mnitu l'utilise pour avoir soit 0 soit 1 Ca devrait (sauf erreur de code) être équivalent à : Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 31 ![]() |
Merci McM pour tes réponses.
Bonne journée. Cdlt, Olivier |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com