|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 48 ![]() |
Bonjour,
Je soumet mon problème en espérant que quelqu'un pourra me renseigner. But de la procédure: Sélectionner des enregistrements basé sur trois paramètres en entrée (no.employé, date début, date fin) faire un traitement simple sur les enr. et retourner les enr. J'ai créé une procédure (BD oracle) où j'ai mes 3 paramètres IN et un IN/OUT de type REF CURSOR. CREATE OR REPLACE PROCEDURE SP_Absence_employe(matricule IN varchar2, date_deb IN date, date_fin IN date, p_cursor IN OUT TYPES.cursortype) IS cursor c1 (matr varchar2, debut date, fin date) IS select t2.ch1, t2.ch2, t1.ch3,t3.ch4, sum(t1.chg5/3600) hres from ((t2 inner join t1 on t2.id = t1.id) inner join t3 on t1.codeid = t3.codeid) where (t2.id = matr) and (t1.date between debut and fin) and (t1.codeid in (19201,19202,19203,19301,19302)) group by t2.ch1, t2.ch2, t1.ch3, t3.ch4 order by t1.date; v_matr varchar2(15); v_nom varchar2(64); v_deb date; v_date date; v_fin date; v_code varchar2(50); v_hres number(16,6); b4_matr varchar2(15); b4_date date; b4_code varchar2(50); tothr number(16,6); BEGIN OPEN c1(matricule, date_deb, date_fin); FETCH c1 INTO v_matr, v_nom, v_date, v_code, v_hres; b4_matr := v_matr; b4_date := v_date; v_deb := v_date; b4_code := v_code; tothr := 0; LOOP Traitement des enregistrements j'ai enlevé le code qui traite... pas vraiment nécessaire. INSERT INTO FICHIER (table temporaire) (MATRICULE, DATE_DEBUT, DATE_FIN, CODE_PAIE, HEURES) VALUES (b4_matr, v_deb, b4_date, b4_code, tothr); FETCH c1 INTO v_matr, v_nom, v_date, v_code, v_hres; EXIT WHEN c1%NOTFOUND; END LOOP; CLOSE c1; OPEN p_cursor FOR SELECT MATRICULE, DATE_DEBUT, DATE_FIN, CODE_PAIE, HEURES FROM FICHIER; END SP_Absence_employe; Ma procédure fonctionne bien lorsque je la teste avec l'utilitaire TOAD. P_cursor contient mes enregistrements. Mon problème est lorsque j'essaie de l'appeler avec BO, j'entre mes trois paramètres et lorsque je l'exécute il me donne le message erreur suivant. Exception: DBD, ORA-08103: object no longer exists State: N/A J'ai l'impression d'être près du but à moins qu'il est impossible d'accéder à mes enregistrements de cette façon. Merci d'avance si quelque à une réponse ![]() A+ Hélène |
|
|
00
|
|
|
#2 |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Bonjour Hélène,
Ca fait plaisir de voir un peu de PL/SQL sur le Forim BO ... J'ai lu le code de ta procédure et bien que n'ayant pas encore bu mon café ... [FONT=Courier][LEFT]Je n'y vois pas de raison il est en tout point conforme aux exemples proposés par BO (je suppose que TYPES.cursortype est défini ). Côté Supervisor tu as la connection dans l'onglet procédure stockées ? Dans les restrictions de profil utilisateur les procédures stockées te sont autorisées ? Dans BO tu as ta procédure dans la liste ?[/LEFT] [/FONT]
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 48 ![]() |
Salut Bruno2R !!!
Quel plaisir de voir que mon problème peut intéresser quelqu'un. Je voudrais vraiment passer à autre chose. J'ai épluché l'aide de BO mais les exemples donnés sont souvent plus "basics" que ce que l'on a besoin d'obtenir. Eh..... Oui ---> TYPES.cursortype est défini Oui ---> Côté Supervisor tu as la connection dans l'onglet procédure stockées ? Oui ---> Dans les restrictions de profil utilisateur les procédures stockées te sont autorisées ? Oui ---> Dans BO tu as ta procédure dans la liste ? Le message erreur que j'obtiens c'est vraiment à la toute fin lorsque j'exécute ma SP à travers BO. Ce qui signifie: que j'ai choisi "procédures stockées", qu'il m'a montré la connexion à choisir, que j'ai choisi la procédure à exécuter, qu'il m'a donné la fenêtre pour que je puisse entrer mes paramètres et croyant que mes misères étaient résolues j'ai appuyé sur le bouton "éxécuter" Je crois que mon message erreur concerne mon paramètre p_cursor... Je te donne la définition de mon curseur au cas où... CREATE OR REPLACE PACKAGE APP_RH_KRONOS.TYPES AS TYPE cursorType IS REF CURSOR; END ; Merci de te pencher là-dessus, me laisse pas tomber je suis au bout de la route !!! Je n'ai plus d'idées. En attendant ta prochaine réponse qui aura un certain décalage car je suis au Québec (Canada), je travaille à un autre dossier. A+ Hélène |
|
|
00
|
|
|
#4 | ||||
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Pour tout te dire .... je fais du SQL PL/SQL toute la journée mais je n'ai jamais utilisé de procédure stockée dans BO (je crée plutôt de l'infocentre dans Oracle sur lequel je fais des univers ou du sql à la carte)
Je me suis donc précipité sur le manuel d'accès aux données et le mauel utilisateur où les exemple sont succints mais conformes à ce que tu as fait. Leur exemple de définition de curseur est la suivante Manuel d'accès aux données p67 : Creating a Cursor inside a Package A package is a database object that contains related PL/SQL types, objects, and To create a package, you can use the following statement Code :
Code :
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
||||
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 48 ![]() |
BRUNO2R,
Je me suis défini un curseur général. Il prendra la structure d'une table temporaire dans ma procedure. Honnêtement, je ne vois pas quoi mettre... RETURN ? Le savoir n'est important que s'il est partagé. Hélène |
|
|
00
|
|
|
#6 | ||||||||||
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Mais justement Hélène,
Table temporaire et Exception: DBD, ORA-08103: object no longer exists Ca te fait penser à rien ? As tu essayé avec RETURN ? Je viens de découvrir que dans la version Francaise deu Manuel daccès aux données le seul exemple de procédure stockée est basé sur Microsoft SQL Server: Code :
Code :
Code :
Code :
Code :
A demain pour la suite du feuilleton.
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
||||||||||
|
|
00
|
|
|
#7 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 48 ![]() |
BRUNO2R,
comme je te l'ai dit précédemment j'avais déjà tout épluché l'info que tu as mis dans ton dernier messsage. OK j'ai essayé quelques options 1- j'ai ajouter un return Code :
2- Ensuite au conseil d'un collègue, j'ai appliqué à la lettre le code qu'ils donnent dans ton exemple soit: J'ai enlevé le statut temporaire de ma table, j'ai ajouté du data bidon pour faire un test, j'ai appelé ma procédure de la même façon qu'il était inscrit et bingo tout a fonctionné... ... sauf que j'aimerais bien travailler avec une table temporaire (virtuelle) associée à la session ce qui signifierait que plusieurs usagers pourraient simultanément appeler la même requête (procédure). Je peux toujours m'en sortir avec une table non temporaire alors je devrai avoir un champs qui indiquerais le poste qui a nourrit l'enregistrement pour pouvoir ensuite sélectionner tous les enregistrements appartenant à ce poste. Ça je le sais depuis le début. Enfin, il faut que ça aboutisse alors je vais peut-être me tourner vers cette solution. ![]() Si tu penses à quelque chose, fais-moi signe. merci bye Hélène |
||
|
|
00
|
|
|
#8 | |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
J'ai pensé à ton problème et ton ernier message me conforte dans ce qui n'était qu'une intuition (relation entre table temporaire et Ora-08103).
Je pense que tu dois faire le deuil de cette table ... temporairement ! Il se trouve que tu a fait l'impasse dès tonpremier message sur le traitement qui aboutit à cette table temporaire. Citation:
Puisque semble-t-il son objet est de calculer le total du nombre d'heures tothr tu devrais pouvoir l'obtenir à l'aide de jointures, voir de requêtes imbriquées directement dans le premier curseur. Qu'en penses tu ?
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
|
|
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 48 ![]() |
Salut,
À peine quelques gorgées de mon premier café avalées... Ce traitement ne peut-il se faire dans le SELECT du curseur ? Puisque semble-t-il son objet est de calculer le total du nombre d'heures tothr tu devrais pouvoir l'obtenir à l'aide de jointures, voir de requêtes imbriquées directement dans le premier curseur. Après maintes tentatives, je n'ai pas réussi à obtenir ce que j'ai besoin, sinon il y a belle lurette que je me serais tourné vers le SQL à la carte. Mon résultat final doit me donner les enregistrements d'absence d'un employé X entre deux dates passées en paramètes. Dans mon fichier, les enregistrements sont par jour et l'usager ne veut pas voir tous les enregistrements. Il veut seulement savoir si X a été absent du yyy au zzz. Imagine un employé en absence long terme 6 mois, ça ferait un rapport volumineux. ex. 8142 M. Patate 2007-01-03 Absence 12 h 8142 M. Patate 2007-01-04 Absence 12 h 8142 M. Patate 2007-01-05 Absence 12 h 8142 M. Patate 2007-05-02 Absence 8 h 8142 M. Patate 2007-05-26 Absence 4 h résultat 8142 M. Patate 2007-01-03 2007-01-05 Absence 24 h 8142 M. Patate 2007-05-02 2007-05-02 Absence 8 h 8142 M. Patate 2007-05-26 2007-05-26 Absence 4 h S'il y a <= 3 jours de différence entre les dates, je continue à lire parce que c'est toujours la même absence. Les employés étant sur des quarts de travail il n'y a pas de tx's les journée non cédulées c'est pourquoi je dois tenir compte du 3 jours. Voilà, je t'ai tout dit... des fois que tu aurais ...
|
|
|
00
|
|
|
#10 | |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
ALORS QUELLE VERSION ORACLE ?8? 9? 10?
Autre chose, comment fait tu ? Citation:
8142 M. Patate 2007-01-03 2007-01-05 Absence 24 h moi j'en vois 36 ...
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
|
|
|
00
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 48 ![]() |
Désolé, après avoir bu tout mon café j'en vois aussi 36
On est à la version oracle 9.2, mais j'ai pris le temps de parler avec le DBA car je savais que nous changions de version de ce système et il m'a dit que le nouveau serveur serait oracle 10. Nouvelle version d'ici la fin novembre 2007. .... je suppose fonctions analytiques qui ne sont pas disponibles en orale 9 ? Y'a des semaines où j'aimerais bien être coiffeuse !!! |
|
|
00
|
|
|
#12 |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Certaines fonctions analytiques sont apparues en v 9i
Manqué. Bon je dois partir en week-end (oui on a un peu d'avance sut toi pour l'heure). Si tu peux fais passer la partie de traitement que je vois si on peut l'écrire autrement que dans une table temporaire. Coiffeuse !! Non je préfère l'extension sql à l'extension tif Bye
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
|
|
00
|
|
|
#13 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 48 ![]() |
Voilà la procédure complète...
Code :
A+ Hélène |
||
|
|
00
|
|
|
#14 | ||
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Merci,
J'essaierai de l'étudier ce week-end. En attendant tu pourrais jeter un coup d'oeil à cette possibilité d'emboiter les curseurs (doc oracle) Code :
Courage ... t'es la meilleure des coiffeuses
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
||
|
|
00
|
|
|
#15 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 48 ![]() |
Merci Bruno2R,
je vais regarder ce que tu as envoyé lorsque j'aurai une minute... "la coiffeuse" c'est une blague interne dans mon secteur (où je suis la seule femme). Quand j'en ai marre de l'informatique ou que je suis débordée je leur dis toujours "Quelqu'un peut-il me dire pourquoi je ne suis pas une coiffeuse ce matin ? " ![]() Hélène |
|
|
00
|
|
|
#16 | ||||||
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Bonjour Hélène,
Je vais t'avouer un truc : BO IL SE CROIT PLUS TORDU QUE NOUS ! EH BIEN NON ! ALORS ON VA PAS LUI LAISSER LE DERNIER MOT ![]() J'ai relu (oh et avec quelle délectation !) ton PL/SQL. Et quelque chose me chagrine : Citation:
Code :
Tu devrais essayer de déclarer le curseur dans un package avec cette spécifité (mais peut-être l'as tu fait (TYPES.cursortype?) Code :
Ce que je viens de trouver sur le forum USA de BO semble confirmer cette piste : Citation:
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
||||||
|
|
00
|
|
|
#17 | ||||||||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 48 ![]() |
hum...
Code :
Code :
Code :
Code :
Plus le temps passe et je vais me retrouver avec la version d'oracle 10g ! pour pouvoir mettre à profit les fonctions analytiques dont tu m'as dit que tout se ferait seul Le feuilleton tourne en rond, ils doit y en avoir qui ont changé de chaine depuis longtemps ! et le cartésien n'ayant pas encore trouver la solution se pencha encore plus car il voulait sauver la belle... à suivre ![]() Hélène |
||||||||
|
|
00
|
|
|
#18 | ||
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Bonjour Amie au loin
Je viens d'avoir un nouveau jouet tout neuf pour monter mon infocentre en Oracle 10g ... YES ! Et lisant quelques lignes de la littérature de ladite version je tombe sur ça : "Les tables temoraires ont été introduites dans Oracle 8i ...." ça nous le savions toi et moi puisque tu l'utilises dans ta procédure problématique tic tic En parcourant la syntaxe de la commande Code :
A essayer (sous reserve que l'option existe dès la version 8i ... à vérifier. Bientôt une bonne nouvelle ?? Je me languis ...
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
||
|
|
00
|
|
|
#19 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2007 Messages : 48 ![]() |
![]() Appelons-le MONSIEUR Voyant qu'il y avait autre chose a essayé et que ça ne demandait pas trop d'efforts de programmation, la paresseuse en moi s'est ruée pour modifier le tout et attendre patiemment les résultats.... et s'Il avait raison, si ça fonctionnait, ça a pas mal d'allure, est-ce que je peux espérer Et bien oui, bingo J'ai toujours su que tu y arriverait ![]() Je commence par la vague car il n'y a pas de "Smileys" qui font une ovation Là était le problème parce que maintenant ça fonctionne "a one". Lorsqu'on crée une table temporaire si on ne spécifie pas "on commit" il met delete par défaut. D'ailleurs dans la première semaine de nos échanges Blague à part, je veux sincèrement te remercier Bruno. je sais que tu as mis du temps pour résoudre mon problème et ça je l'apprécie vraiment. Fin du feuilleton le cavalier regarda la belle et lui dit: "ce n'est qu'un au revoir" et il s'en retourna pour sauver d'autres âmes en détresse. ![]() A+ Sainte...Hélène |
|
|
00
|
|
|
#20 | |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
C'est trop...
Merci à Toi pour ces félicitations... Mais Le boulot n'est pas tout à fait fini : Je veux te signaler un autre avantage à tirer de la solution. Ne pas oublier de définir la table temporaire en GLOBAL (option également facultative... je sens que je vais me passionner pour ces nuances optionnelles) Pourquoi ? "GLOBAL" signale qu'il s'agit d'une table temporaire et que sa définition est visible par toutes les sessions. Les données, elles, ne sont visibles que par la session qui les insère dans la table ! Ce qui semblait être un de tes premiers soucis. Citation:
Bon on se la marque ![]() A 254 affichages on va passer à autre chose... N'empêche je suis super content car ça m'a vraiment appris quelquechose !
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!" |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com