|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() Développeur .NET Inscription : avril 2009 Messages : 264 ![]() |
Bonjour,
j'ai un petit soucis avec une procédure stockée dans laquelle j'aimerais mettre à jour 3 champs d'un enregistrement. Malheureusement, après déclenchement, un seul des trois champs est mis à jour. Est-ce que j'aurais oublié quelque chose ? Problème de syntaxe ? D'initialisation ? Code :
Toute aide même minime est la bienvenue. D'avance merci |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() |
Vous avez fait une belle erreur, en nommant vos variables comme les colonnes, regardez votre update au final :
Code :
Utilisez des règles de nommages pour vos objets PL/SQL, préfixez les variables par v$_ et les paramètres par p$_ par exemple.
__________________
Email : http://scr.im/waldar |
||
|
20
|
|
|
#3 |
|
Membre éclairé
![]() Développeur .NET Inscription : avril 2009 Messages : 264 ![]() |
Effectivement... J'étais passée à côté de ce "petit détail"...
ça marche bien mieux, merci beaucoup. |
|
|
00
|
|
|
#4 | |||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Citation:
![]() La bonne solution, mais rarement utilisée, est de préfixer le nom des variables avec le nom de la fonction ou du bloc. Code :
|
|||
|
|
11
|
|
|
#5 | |||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Citation:
Certains experts(David Aldridge) sont du même avis que vous https://forums.oracle.com/forums/thr...65231� |
|||
|
|
00
|
|
|
#6 | |
![]() Inscription : décembre 2002 Messages : 2 387 ![]() |
Citation:
Je ne vois franchement pas l'intérêt de surcharger son code en préfixant chaque variable par le nom de la procédure. Les bons vieux préfixes p_ et v_ , qui sont de tradition depuis des lustres, ont le mérite de rester concis tout en assurant la distinction avec le nom des colonnes.
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
|
11
|
|
|
#7 | |||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Citation:
Bryn Llewellyn, PL/SQL Product Manager, Oracle Headquarters, Doing SQL From PL/SQL Best And Worst Practices Citation:
Citation:
|
|||
|
|
00
|
|
|
#8 |
![]() Inscription : décembre 2002 Messages : 2 387 ![]() |
C'est bien vrai ça, les mauvais habits meurent durement !
Certes, pour que les préfixes p_ et v_ permettent d'éviter la confusion avec les noms de colonnes, aucune colonne ne doit commencer par un tel préfixe : c'est du simple bon sens. Je reconnais que rien ne garantit que ce bon sens sera respecté par tous. Ca reste cependant très facile à vérifier, si on y tient, en consultant DBA_TAB_COLUMNS. Pour ma part, quand je prends le volant, je ne m'habille pas en combinaison de plongée avec bouteilles d'oxygène, pour le cas où ma voiture viendrait à tomber à l'eau. Pourtant, le risque n'est pas nul, un tel accident fait plusieurs morts chaque année. Cette histoire de préfixer chaque variable par le nom du bloc dans laquelle elle a été déclarée est du même ordre que la bouteille d'oxygène ; cela explique probablement pourquoi cette technique, comme tu l'indiques toi-même, est "très peu employée". Et je n'ai pas remarqué, jusque là, dans les exemples de code que tu proposes, que tu l'utilisais non plus...
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
00
|
|
|
#9 |
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Malheureusement j'ai comme l'impression qu'il ne faut pas enrichir ce forum avec des liens que l'on juge pertinents. Sinon, comment expliquer qu'il en reçoit des notes négatives alors qu'à mes yeux il mérite d'être lu et apprécié à sa juste valeur. Que ceux qui le trouvent mal approprié aient au moins le mérite de nous en donner la raison. Cela servira à tout le monde j'en suis persuadé.
http://jamesmorle.wordpress.com/2011...ight-practice/ |
|
|
14
|
|
|
#10 | |||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Avez-vous pris le temps de lire tout le paragraphe en question et de bien noter les changements dans la gestion des dépendances induites par la version 11g ?
Citation:
|
|||
|
|
01
|
|
|
#11 |
![]() Inscription : décembre 2002 Messages : 2 387 ![]() |
Marius, si tu avais la bonté de traduire (ou au moins résumer) tout ces pavés en français, ça faciliterait la discussion, et ceux qui viennent sur un forum francophone pour avoir la chance de comprendre ce qui s'y dit, se joindraient à moi pour t'en remercier.
La technique que tu recommandes réduit les risques d'invalidations inutiles. C'est une très bonne chose que ça existe et que tu nous en fasses part. Maintenant, selon son contexte, chacun est libre de juger que les invalidations ne lui posent aucun problème, et que le préfixage de toutes les variables est une peine démesurée. Je ne peux qu'acquiescer lorsque Morle dit qu'il faut avant tout comprendre l'esprit et la justification d'une "bonne pratique", ce qui permet de l'adopter ou non en connaissance de cause. Et non, je n'ai pas lu les 70 pages de ton document, je garde ça pour ma retraite (30 ans, c'est vite passé).
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
11
|
|
|
#12 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#13 |
![]() Inscription : décembre 2002 Messages : 2 387 ![]() |
Sur le fond, si je résume bien, ta recommandation (préfixer toute variable par le nom du bloc dans lequel elle a été déclarée) procure 2 avantages :
- elle améliore la robustesse du code en garantissant qu'il n'y aura jamais de confusion entre une variable et un nom de colonne, même si les noms de colonnes des tables sont amenés à évoluer - à partir de la 11g, elle pourra éviter certaines invalidations inutiles d'objets PL/SQL, lorsque des modifications non significatives ont lieu dans les objets référencés. J'ai dit ce que je pensais du bénéfice de ces avantages par rapport aux efforts d'écriture du code qu'ils imposent. Sur la méthode, je ne considère pas que faire sèchement des copier/coller, sans aucune explication complémentaire, constitue une argumentation, et encore moins une argumentation conviviale ni pédagogique. Qui plus est, sur un forum francophone, le principe est de s'exprimer en français. Quant à ton lien, il pointe vers une liste de documents dans laquelle il faut choisir le bon, qui fait 79 pages (en anglais encore), et se débrouiller pour deviner quelle partie tu voulais qu'on lise. Bref, je ne suis pas convaincu que tes procédés soient en phase avec tes intentions. (Cela dit, je serais heureux de partager une bière avec toi à la première occasion )
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
10
|
|
|
#14 | ||
![]() ![]() |
Au final, j'aurai appris qu'on peut nommer un bloc PL/SQL :
Code :
Je vais maintenant avoir de quoi faire de la revue de mon propre code !
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#15 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Citation:
Cela étant dit
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com