|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |||||||
|
Membre éclairé
![]() ![]() |
Hello les gens,
Quelqu'un pourait t il me fournir la syntaxe adéquate pour la création d'une procédure stockée parametrée (nommons la PSP) retournant plusieurs enregistrements ? Le but étant de pouvoir par la suite réaliser une jointure externe avec le résultat que retournerais PSP avec quelque chose ressemblant à: Code :
Merci pour toutes vos contributions. Edit: ça devient compliqué je ne pense pas que la solution avec la procédure stockée soit bonne. Il est écrit ici que: Citation:
Je viens de trouver ce post: http://bytes.com/topic/db2/answers/8...error-sql0338n La personne propose de remplacer: Code :
Code :
|
|||||||
|
|
00
|
|
|
#2 | ||||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
J'écrierais plutôt :
Code :
Code :
J'appelle ensuite cette fonction comme suit : Code :
SELECT * FROM TABLE( MonUDTF(Parm1, Parm2...) ) AS Table1 |
||||
|
|
00
|
|
|
#3 | ||||
|
Membre éclairé
![]() ![]() |
Merci d'avoir répondu aussi vite.
En sortant Code :
cag.EVENTID IN (SELECT MaColonne FROM TABLE(PSP(9, 2010))) Code :
Code :
Question: MonUDTF peut elle être DETERMINISTIC ? Si oui cela pourrait bien résoudre mon problème. |
||||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Il faut évidemment que la sous-requête du IN() ne te renvoie que les valeurs sélectionnées (à savoir 111, 112 et 113). Autrement dit, arrange-toi pour que la table camaster.EVENTID ne contienne ou ne te renvoie que les valeurs sélectionnées.
Edit : L'UDTF peut tout à fait être "DETERMINISTIC". |
|
|
00
|
|
|
#5 | ||
|
Membre éclairé
![]() ![]() |
bizzare je viens de créer:
Code :
Code :
SELECT * FROM TABLE( FCT_GET_PROPER_EVENTIDS4DATE(9, 2010) ) AS Table1 Edit: Il fallait rajouter le suffixe de la base. Bon la fonction retourne bien ce qu'il faut mais impossible de l'utiliser dans la sous requête sans me prendre le SQL0338N. J'ai appris un nouveau 'truc', mais je ne suis gère plus avancé
|
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Integer implique de passer les paramètres de la fonction table en binaire sur l'instruction SELECT. Aussi, au lieu d'Integer, fais un essai en définissant MOIS et ANNEE en numérique étendu ( Numeric ) ou en packé ( Decimal ) si supporté, comme illustré dans mon exemple précédent ci-dessus.
Edit : A quoi sert de donner un nom spécifique identique au nom de la fonction ? A rien ! Alors, indique un nom vraiment spécifique. Je ne comprends pas pour le moment pourquoi tu encaisses un SQL0338.Je cherche et te dis si je trouve qqch. |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Pour y voir + clair, colle ici toute la requête telle que tu l'exécutes.
|
|
|
00
|
|
|
#8 | ||
|
Membre éclairé
![]() ![]() |
Ne t'en prens qu'a toi même
Code :
|
||
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
J'ai retiré tous tes commentaires pour y voir + clair et c'est pas dommage
Citation:
|
|
|
|
00
|
|
|
#10 | |||||
|
Membre éclairé
![]() ![]() |
Pour répondre à tes commentaires:
Citation:
Citation:
Code :
Citation:
|
|||||
|
|
00
|
|
|
#11 | |||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Remonte les 3 fichiers au niveau du JOIN, c'est meilleur et tu dois te retrouver sauf erreur de ma part avec qqch comme çà :
Code :
Citation:
|
|||
|
|
00
|
|
|
#12 | |
|
Membre éclairé
![]() ![]() |
Citation:
|
|
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Citation:
|
|
|
|
00
|
|
|
#14 | ||
|
Membre éclairé
![]() ![]() |
La sous requête DOIT rentrer dans la clause 'ON' si je veux avoir les mêmes résultats c'est tout. Le tout est de trouver un moyen de la faire. L'UDTF même si DETERMINISTIC et sans EXTERNAL ACTION ne passe pas.
Rappel: Citation:
Citation:
Ce problème je l'ai depuis un moment, et on m'a conseillé une MQT il y'a longtemps mais il faudrait pouvoir lui passer mes paramètres tu en penses quoi ? |
||
|
|
00
|
|
|
#15 | |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Citation:
En revanche, je ne comprends pas pourquoi les résultats sont différents entre l'UDTF et son remplacement par des valeurs en dur dans la mesure où ces dernières sont les mêmes que les valeurs renvoyées par l'UDTF. Fais une liste des valeurs en dur que tu passes et les valeurs que te renvoie l'UDTF et colle-la ici ou zippe-la en PJ si trop grosse. Quant au MQT, je dirais NIET car il faudrait le réactualiser et le paramètrer et je pense que ça va ajouter alors une couche de complexité dans un truc déjà bien complexe. |
|
|
|
00
|
|
|
#16 | |||
|
Membre éclairé
![]() ![]() |
Citation:
Quand je dis: Citation:
Les résultats ne sont pas différents entre l'udtf et son remplacement par ses valeurs renvoyées, mais entre une requête (entière) A avec les valeurs en dur pourvu que ce soit au niveau du 'on' et une requête (entière) B avec l'udtf ou ses valeurs en dur peu importe pourvu que ce soit au niveau du 'where'. Quand aux valeurs en dur c'est la suite de chiffre en commentaire sur la requête. Ce constat était tout à fait prévisible, le fait de faire sortir la sous requête du 'on' et la mettre sur le 'where' prive les résultats de tout enregistrement ne réalisant pas la condition de la sous requête parceque justement déplacée sur le 'where'. Citation:
|
|||
|
|
00
|
|
|
#17 | ||||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Citation:
Citation:
Toutefois, je ne me suis sans doute pas été assez concentré sur ton problème sinon j'aurais dû remarquer que tu faisais un LEFT OUTER JOIN avec la table FBL_MASTRDTLS_FACT (mastr) et pas un simple JOIN et c'est ce "LEFT OUTER" qui crée la différence dont tu parles. Autrement dit, tu veux que le recordset (le résultat) contienne parmi d'autres les zones sélectionnées de la table "mastr", que cette dernière matche ou pas avec les valeurs que renvoie l'UDTF. Et c'est là-dessus que tu aurais dû insister... Ceci dit, essaie ça mais pas sûr : Code :
|
||||
|
|
00
|
|
|
#18 | ||
|
Membre éclairé
![]() ![]() |
Citation:
Citation:
Edit: zut grillé |
||
|
|
00
|
|
|
#19 | |||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Citation:
Code :
|
|||
|
|
10
|
|
|
#20 |
|
Membre éclairé
![]() ![]() |
Yes
ça a apparement l'air d'être ça la solution (LEFT JOIN TABLE) en tout cas le nombre de résultats entre les requêtes avec les valeurs en dur et les requêtes avec LEFT JOIN TABLE de trois mois différents sont les mêmes reste à vérifier les contenus que je viens d'imprimer. ça devrait me prendre un peu de temps. Merci beaucoup beaucoup mercure. En plus tu as donné la soluce juste après que ce soit dissipée l'incompréhension sur le LEFT OUTER JOIN t'es un chef, merci encore.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com