|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre chevronné
![]() Chef de projet NTIC Inscription : octobre 2004 Messages : 1 148 ![]() |
Bonjour à vous,
Je vais essayer de bien synthétiser à ma question. J'ai une requete SQL A qui me renvoie plusieurs lignes d'un couple de deux clés , soit cle1 et cle2. Je veux maintenant mettre à jour une table B par un update qui devrait ressembler à mon exemple .... Code :
Merci pour votre aide |
||
|
|
00
|
|
|
#2 | ||
|
Membre confirmé
![]() Inscription : mai 2007 Messages : 385 ![]() |
Avec du PlSql, je vois quelque chose du genre :
Code :
Cdlt, LBO72. |
||
|
|
01
|
|
|
#3 | |||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#4 | ||
|
Membre confirmé
![]() Inscription : mai 2007 Messages : 385 ![]() |
On peut bien evidement l'écrire comme ça :
Code :
Cdlt, LBO72. |
||
|
|
01
|
|
|
#5 | |||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Citation:
Après pourquoi faire un curseur plutôt qu'une seule requête, avec MERGE on peut écrire quelque chose comme : Code :
|
|||
|
|
10
|
|
|
#6 | |
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Citation:
Les "bind variables" ont des avantages et des inconvénients. Leur avantage vient du fait qu'elles permettent la réutilisation (ou le partage) des curseurs qui se trouvent dans la SGA (particulièrement dans la "library cache") et, donc, évitent le "hard parse" et ses effets sur la performance au travers du temps que celui-ci nécessite de la part de la CPU (le "hard parse" brule beaucoup de CPU) Quant à leurs inconvénients, on peut le dire, elles ne s'entendent pas aves les histogrammes. On créé des histogrammes parce que des requêtes identiques génèrent un temps de réponse et un volume de données très différents l'un de l'autre et nous ne voulons pas que ces requêtes identiques utilisent (ou partage) le même explain plan. Quelle contradiction!!! L'un (bind variable) est pour le partage et la réutilisation du même curseur (même plan d'exécution) et l'autre est pour que chaque requête ait son propre plan d'exécution C’est pourquoi en règles général des personnes comme Tom Kyte suggèrent :
Par contre lorsque vous proposez d’utiliser le sql dynamique dans une procédure stockée, là vous devriez faire attention à la bonne utilisation des bind variables. Le concept de ‘’binding’’ automatique disparaît et vous devriez redoubler d'attention quant à l'utilisation de ces variables sans parler des riques (sql injection) que vous pourriez introduire dans votre application lorsque des concaténations sont utilisées. Quant au calcul du plan d’exécution à chaque itération, j’espère que le petit rappel a atteint son but. |
|
|
|
10
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Citation:
Petit remarque : la réutilisation des curseurs date de la version 5/6 d’Oracle et ce mécanisme était à l’époque une réponse adaptée par rapport à l’optimiseur basée sur les règles. Mais l’optimiseur basée sur les règles n’existe plus … bref, il existe toujours mais… |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com