Le forum (ô combien francophone) des utilisateurs de Powerbuilder.






Bonjour tout le monde,
Comment utiliser les index dans un select d'une datawindow ?
Merci d'avance
Dernière modification par mattdamon (13-05-2009 18:21:43)
Hors ligne






Je suis arrivé à déclarer dans mon rapport, l'indexe : Index_dc , ce dernier porte sur la colonne dc (de type date) de la table hdc
SELECT /*+ INDEX(d Index_dc) */ d.a, d.b FROM hdc d, hvc c, ho o WHERE (o.a = d.f) AND (d.dc <= c.dv) AND (d.dc > (SELECT MAX (c1.dv) FROM hvc c1 WHERE (c1.pr = c.pr) AND (c1.dv< c.dv) ) )
Le problème c'est que au niveau de PL/SQL developper et lors de l'exécution de la requete ci-dessus, il y eu changement de la syntaxe de requête qui devient :
SELECT d.a, d.b FROM hdc d, hvc c, ho o WHERE (o.a = d.f) AND (d.dc <= c.dv) AND (d.dc > (SELECT MAX (c1.dv) FROM hvc c1 WHERE (c1.pr = c.pr) AND (c1.dv< c.dv) ) )
et par la suite ne tient pas compte de mon index !! c'est bizarre non ?
Quelqu'un a une idée ?
Dernière modification par mattdamon (11-05-2009 14:21:28)
Hors ligne











C'est normal: Dans la première requête, tu utilises un hint qui force l'utilisation de ton indexe, et pas dans la seconde.
Hors ligne






foon a écrit:
C'est normal: Dans la première requête, tu utilises un hint qui force l'utilisation de ton indexe, et pas dans la seconde.
Désolé foon, j'ai mal exprimé mon problème...
J'ai voulu dire que lorsque je fais copie/coller de la première requête (avec forcage de indexe) sur PL/SQL developer pour l'exécuter, ce dernier enlève l'indexe... qui sera la 2 ième requête.
j'ai pas compris, pourquoi l'indexe a été enlevé ?
Si vous avez pas compris..;je peux expliquer autrefois !
Dernière modification par mattdamon (11-05-2009 14:51:35)
Hors ligne











Ce n'est pas l'indexe qui est enlevé, mais le hint.
Tu as essayé de le rajouter directement dans PL/SQL Developper?
Hors ligne






mon souhait consiste à forcer l'utilisation de l'indexe Index_dc dans l'exécution de ma requête, cette requête est passé en paramètre à une datawindow, mais malheureusement lorsque la retrieve est lancée sur cette datawindow, la requête passé à Oracle ne contient pas /*+ INDEX(d Index_dc) */, et ceci en consultant les requêtes exécutées sous oracle, est ce normal ?, je suppose que la datawindow considère ça comme un commentaire ? est ce que vous avez des solutions ?
Merci d'avance
Hors ligne











Mon conseil: passe par une procédure stockée utilisant le hint souhaité.
Hors ligne






foon a écrit:
Mon conseil: passe par une procédure stockée utilisant le hint souhaité.
Dans ce cas là, je peux utiliser un curseur
Mais j'ai pas compris, pourquoi la requête a été changée...
Dernière modification par mattdamon (11-05-2009 16:24:42)
Hors ligne











Je ne vois pas le rapport entre utiliser un curseur et utiliser une datawindow chargée par procédure stockée, mais bon...
Hors ligne






foon a écrit:
Je ne vois pas le rapport entre utiliser un curseur et utiliser une datawindow chargée par procédure stockée, mais bon...
Comment utiliser une datawindow chargée par procédure stockée ? Tu veux dire que je peux mettre ma procédure stockée dans la datasource de la datawindow ?
Hors ligne











datawindow data source stored procedure
Hors ligne






Hors ligne











Ta procédure est dans un package ou non? Tu l'as bien compilée sous le bon schéma, avec les grants qui vont bien?
Hors ligne






foon a écrit:
Ta procédure est dans un package ou non? Tu l'as bien compilée sous le bon schéma, avec les grants qui vont bien?
Oui dans un package bodies et aussi déclaré dans package !! je vois pas pourquoi mes procédures ne s'affichent plus !!
je me demande est-ce qu'il n' y a plus des déclarations qui manquent au niveau de PB ?
Dernière modification par mattdamon (11-05-2009 18:42:31)
Hors ligne











Non, il faut que tu demandes l'affichage des packages et de leurs contenus au niveau des paramétrages de ta connexion à la base de données Oracle.
Hors ligne






foon a écrit:
Non, il faut que tu demandes l'affichage des packages et de leurs contenus au niveau des paramétrages de ta connexion à la base de données Oracle.
Où Ça et comment ?
Dernière modification par mattdamon (11-05-2009 19:16:22)
Hors ligne











Database Profile SetUp => Onglet System => Cocher "List Package Subprograms"
Hors ligne






Bonjour à tous,
Je revient autrefois...
J'ai crée un exemple de procédure (ci-dessus) :
CREATE OR REPLACE PROCEDURE select_rapport(numdeb INTEGER) IS li_num integer ; CURSOR conso_cursor IS SELECT o.num FROM op.TABLE1 o WHERE o.num = numdeb; BEGIN OPEN cursor1 ; LOOP FETCH cursor1 INTO li_num ; END LOOP ; CLOSE cursor1 ; END;
Maintenant j'ai 2 questions à poser :
1-) Lors de la création de la datawindow en lui donnant comme datasource cette procédure, PB se plante...et la datawindow ne se crée pas malgré que la procédure est syntaxiquement correcte, pourquoi ?
2-) Si j'arrive a créer la datwindow et dans mon select j'ai plusieurs champs avec plusiers lignes à afficher dans mon rapport, quel est le liens entre un select chargé dans ma procédure et la retrieve des lignes trouvées ? autrement comment faire le retrieve() ?
Merci et bonne journée
Dernière modification par mattdamon (12-05-2009 10:24:29)
Hors ligne











Il faut que ta procédure stockée retourne ton result set sous forme de curseur en INPUT/OUTPUT. Sinon, ça ne peut pas marcher.
Exemple:
-- -- TYPE type_rec_rce_paie_histo IS RECORD ( emp_matricule gpm_employe.emp_matricule%type, emp_nom gpm_employe.emp_nom%type, emp_prenom gpm_employe.emp_prenom%type, id_rce_paie rce_paie_histo.id_rce_paie%type, id_employe rce_paie_histo.id_employe%type, id_periode_paie rce_paie_histo.id_periode_paie%type, rcepaie_date_fin rce_paie_histo.rcepaie_date_fin%type, rcepaie_alternance rce_paie_histo.rcepaie_alternance%type, rcepaie_seuil_maj rce_paie_histo.rcepaie_seuil_maj%type, rcepaie_hr_supp_maj rce_paie_histo.rcepaie_hr_supp_maj%type, rcepaie_majoration rce_paie_histo.rcepaie_majoration%type, rcepaie_maj_tx01 rce_paie_histo.rcepaie_maj_tx01%type, rcepaie_maj_tx02 rce_paie_histo.rcepaie_maj_tx02%type, rcepaie_hr_supp_nonmaj rce_paie_histo.rcepaie_hr_supp_nonmaj%type, rcepaie_prec rce_paie_histo.rcepaie_prec%type, rcepaie_acquis rce_paie_histo.rcepaie_acquis%type, rcepaie_pris rce_paie_histo.rcepaie_pris%type, rcepaie_solde rce_paie_histo.rcepaie_solde%type, rcepaie_description rce_paie_histo.rcepaie_description%type ); -- -- TYPE g_cur_rce_paie_histo IS REF CURSOR RETURN type_rec_rce_paie_histo; -- -- PROCEDURE SP_EXTRACT_RCE_PAIE_HISTO ( a_i_id_periode_paie IN rce_paie_histo.id_periode_paie%type, a_cur_rce_paie_histo IN OUT NOCOPY g_cur_rce_paie_histo) -- IS -- BEGIN -- OPEN a_cur_rce_paie_histo FOR SELECT emp_matricule, emp_nom, emp_prenom, id_rce_paie, id_employe, id_periode_paie, rcepaie_date_fin, rcepaie_alternance, rcepaie_seuil_maj, rcepaie_hr_supp_maj, rcepaie_majoration, rcepaie_maj_tx01, rcepaie_maj_tx02, rcepaie_hr_supp_nonmaj, rcepaie_prec, rcepaie_acquis, rcepaie_pris, rcepaie_solde, rcepaie_description FROM rcepaie WHERE rcepaie.id_periode_paie = a_i_id_periode_paie; -- EXCEPTION -- WHEN NO_DATA_FOUND THEN -- NULL; -- WHEN OTHERS THEN -- RAISE; -- END SP_EXTRACT_RCE_PAIE_HISTO;
A toi d'adapter, mais sache évidemment que le curseur doit être déclaré dans un PKS si tu utilises des packages, sinon PB ne pourra pas y accéder.
Hors ligne






Merci infiniment foon pour toute cette éclaircissement, je vais l'essayer et je vous tient en courant pour les nouvelles....
Hors ligne






JCZ a écrit:
as tu regardé ce sujet ?
Intervention parfaite Mr JCZ, tu penses que c'est un problème des EBF PowerBuilder.
En fait, je travaille sur 10.5.1 build 6684 !!
Quels EBF je peux télécharger quel Bug ID?
lala a écrit:
Bonjour erasorz
Et oui, après installation des 3 EBF disponibles, le problème et résolu. Les temps de réponse sont super, je vois le HINT dans Oracle entreprise manager.
Et je n'ai pas à faire de procédures stockées.
C'est merveilleux.
Problème résolu.
Merci beaucoup.
Sur PBADONF on peux télécharger les EBF de la version 10.5 de PB ?
Merci
Dernière modification par mattdamon (12-05-2009 17:05:27)
Hors ligne






Sur le site de Sybase le EBF (Bug ID = 446929) corrige le Bug. mais ce dernier comptaible avec la version 10.5.2 et moi, j'ai la version 10.5.1, est-ce que normal j'utilise ce EBF avec ma version de PB ?
Merci,
Hors ligne






C'est parfait, j'ai installé l'EBF 15278 et ca marche bien.... en plus, mon chef il est très content de moi
Merci à tous
Dernière modification par mattdamon (13-05-2009 18:21:14)
Hors ligne














mattdamon a écrit:
en plus, mon chef il est très content de moi
cool
ton chef c'est cannavaro ?
Hors ligne