Bonjour,
Je travaille avec forms 6i et Oracle 8i.
Mon problème est le suivant : j'ai le résultat d'une requête dynamique à visualiser sous forms.
J'avais donc pensé faire une procédure dans un package du style :
OK, mon package se compile bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 create or replace package monpack is type mon_cur is ref cursor; procedure result (block_data in out mon_cur, <liste_parametres>); end; create or replace package body monpack is procedure result (block_data in out mon_cur, <liste_parametres>) is v_requete varchar2(5000); begin v_requete := 'select .....'; open block_data for v_requete; end; end;
Le problème est lorsque que je veux associer ma procédure à mon bloc (via l'assistant de création de bloc), j'ai aucune colonne qui apparait dans la liste des colonnes disponibles, et quand j'appuie sur le bouton suivant, j'ai le message d'erreur : "Veuillez sélectionner au moins une colonne".
1. J'ai déjà utilisé les ref cursor de manière non dynamique et cela ne posait pas de problème puisque les colonnes étaient identifiées via un record.
2. Les colonnes ramenées par select sont toujours les mêmes, seule la clause where est dynamique. Au départ j'avais donc pensé déclarer mon curseur de la manière suivante :
Mais dans ce cas je n'arrive pas à compiler mon package, j'ai l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 type col_req is record (col1 number(8), col2...); type mon_cur is ref cursor return col_req;
Quelqu'un a-t-il déjà eu ce problème ? Comment peut-on le contourner sans passer par des tables de travail.
Code : Sélectionner tout - Visualiser dans une fenêtre à part PLS-00455: cursor 'BLOCK_DATA' cannot be used in dynamic SQL OPEN statement
Partager