|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mai 2003 Messages : 31 ![]() |
Salut à tous et à toutes,
J'ai créé une procédure en PL-SQL qui prend 3 paramètres en entrée et fait à partir de ces 3 paramètres 1 select dans une table puis 1 insert dans une autre. Lorsque j'ai créé ma procédure il m'a demandé de saisir mes 3 paramètres afin de compiler et de créer ma procédure. Jusque là tout va bien. Si j'essaye d'executer ma procédure avec d'autres paramètres en entrée : SQL > exec recalcul ('xxx', '01/01/2007', '31/12/2007'); il les ignore et conserve ceux passés lors de la création de ma procédure. Comment puis-je faire pour que les paramètres saisis soient pris en compte ? Merci pour vos réponses. |
|
|
00
|
|
|
#2 | ||
|
Invité régulier
![]() Inscription : mai 2003 Messages : 31 ![]() |
Voici la code de ma procédure :
Code :
Si ensuite je l'exécute : exec ('xxx', '01/08/2007', '31/12/2007') ces nouveaux paramètres ne sont pas pris en compte. Ceux saisis lors de la compilation sont conservés. |
||
|
|
00
|
|
|
#3 | ||
|
Membre expérimenté
![]() Inscription : juillet 2007 Messages : 495 ![]() |
C'est plus facile pour nous en voyant ton code
Il faut supprimer les cotes (') et les & dans l'utilisation des paramètres en entrée (je pense qu'il y a confusion avec un autre SGBD => SQL Server ?), puis recompiler. Les & ont pour effet de te demander d'entrer en dur une valeur aux paramètres, et comme ça se passe lors de la compilation, ces valeurs sont conservées comme si tu les avais écrites en lieu et place des paramètres justement. Il serait de bon ton aussi de rajouter un 'IN' pour signifier que ce sont des paramètres en entrée. Essaie de recompiler la procédure suivante : Code :
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche ! |
||
|
|
00
|
|
|
#4 | ||
|
Invité régulier
![]() Inscription : mai 2003 Messages : 31 ![]() |
Merci beaucoup !!!
La procédure compile et se crée correctement. J'ai essayé de l'exécuter avec : Code :
Les paramètres saisis sont corrects pourtant. Si je reprends le SELECT du curseur avec ces paramètres j'ai des enregistrements qui sortent. Y a-t-il un moyen d'intercepter la commande INSERT avec la valeur des différents paramètres ? Merci encore |
||
|
|
00
|
|
|
#5 | ||||
|
Membre régulier
![]() Inscription : avril 2003 Messages : 131 ![]() |
Code :
Code :
|
||||
|
|
00
|
|
|
#6 |
|
Membre expérimenté
![]() Inscription : juillet 2007 Messages : 495 ![]() |
Je pense que la première donnée du VALUES (ALSIGETIDFCMDFACTSUIV) ne peut pas être interprétée : je suppose qu'il s'agit d'une chaîne de caractères, donc à mettre entre côtes, sinon il l'interprète comme une variable (alors que ça n'a pas l'air d'en être une).
Idem pour la deuxième valeur (41) si jamais elle est inséré vers un champs qui n'est pas en NUMBER.
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche ! |
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : mai 2003 Messages : 31 ![]() |
Alors j'ai essayé avec le "C" majuscule ça ne change rien
Pour ce qui est de "ALSIGETIDFCMDFACTSUIV" c'est une fonction qui retourne l'identifiant (primary key) qui doit être utilisé pour insérer une nouvelle ligne dans la table (sequence). J'ai également essayé de mettre à la place nom_de_la_sequence.nexval mais cela ne change rien le INSERT ne se fait pas. Le 41 est inséré dans une colonne de type "NUMBER". Bizarrement quand je saisissais mes paramètres lors de la création de la procédure l'INSERT s'effectuait bien... Merci encore pour votre aide |
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 319 ![]() |
|
|
|
00
|
|
|
#9 | ||
|
Invité régulier
![]() Inscription : mai 2003 Messages : 31 ![]() |
J'ai supprimé le commit de la boucle.
Ensuite pour l'appel de ma procédure j'ai fait : Code :
Y a aucun moyen de voir le INSERT qui est réellement exécuté avec les valeurs des différentes variables ? |
||
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 319 ![]() |
Si l'insert ne se fait pas c'est parce que le curseur ne ramène rien!
Et c'est quoi to_date(DATE_DEB, 'dd/mm/yyyy'). DATE_DEB c'est une DATE déjà !
|
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : mai 2003 Messages : 31 ![]() |
Effectivement le to_date sur des dates il aime pas...
C'était juste ça ... Merci encore à tous pour votre aide A charge de revanche si je peux vous aider !! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com