IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Forms Oracle Discussion :

[forms] ref cursor associé à un bloc de données


Sujet :

Forms Oracle

  1. #1
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut [forms] ref cursor associé à un bloc de données
    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 :
    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;
    OK, mon package se compile bien.

    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 :
    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;
    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
    PLS-00455: cursor 'BLOCK_DATA' cannot be used in dynamic SQL OPEN statement
    Quelqu'un a-t-il déjà eu ce problème ? Comment peut-on le contourner sans passer par des tables de travail.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Plutôt que de passer un curseur à votre procédure, passez plutôt une collection (table de records)
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Il me semblait que cela n'était pas possible en forms 6i ?
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par PlaineR
    Il me semblait que cela n'était pas possible en forms 6i ?
    la version 6 est trop louin dans ma mémoire...
    je crois tout de même qu'elle pouvait gérer des blocs basés sur une interrogation (CLAUSE FROM) ??
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    Membre actif Avatar de Nounoursonne
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 264
    Points : 208
    Points
    208
    Par défaut
    Oui en Forms6i c'est tout à fait possible

  6. #6
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Reste à savoir si le bloc est en visu seulement (OK) ou en modif (KO avec le bloc basé sur clause FROM)

    Mais il ne faut pas abandonner la solution REF CURSOR ou voir si la version 6 accepte une procédure stockée qui accepte de gérer une collection.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Je vois dans la doc en ligne Forms6i que pour créer un bloc basé sur une procédure stockée qui utilise un REF CURSOR, il faut créer le bloc manuellement et renseigner les champs à la mano
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  8. #8
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Merci pour toutes ces informations.

    J'ai opté pour la clause from qui correspond en fait le mieux à mes besoins (simple visualisation), car j'ai une fonction qui me renvoie la requête à partir de paramètres, je n'ai plus qu'à faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    v_requete := '(' || mafonction (...) || ')';
    clear_block;
    set_block_property ('BLOCK1', QUERY_DATA_SOURCE_NAME, v_requete);
    execute_query;
    L'avantage me semble-t-il par rapport au ref curseur (sauf erreur de ma part) c'est que l'utilisateur peut faire des recherches via ENTER_QUERY.

    Pour information, j'ai fait un test avec des collections, cela avait l'air de passer au niveau de la création du block, je n'ai pas été jusqu'à renseigner ma collection en pl, car la clause from répondait mieux à mes besoins.
    Citation Envoyé par SheikYerbouti
    Je vois dans la doc en ligne Forms6i que pour créer un bloc basé sur une procédure stockée qui utilise un REF CURSOR, il faut créer le bloc manuellement et renseigner les champs à la mano
    Pas tout à fait vrai : si le ref cursor est du type :
    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;
    la création du bloc via l'assistant se fait sans problème. Mais à force d'être assisté, on oublie que quand cela ne fonctionne pas automatiquement, on peut le faire manuellement ! Je vais donc de ce pas regarder la solution proposée par Sheik pour créer manuellement mon bloc basé sur un ref curseur dynamique.

    Dernière question, avez-vous une idée de laquelle des 3 solutions (clause from, ref cursor, collection) est la plus performante ? Vu que la requête est assez costaud, c'est une notion à ne pas négliger...
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  9. #9
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Je pense pouvoir affirmer (pour l'avoir testé en 9i) que la clause FROM est plus performante qu'une collection. pourquoi ? personne ne peut me donner la moindre bonne raison...
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  10. #10
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Merci Sheik pour votre sempiternelle disponibilité pour venir en aide aux développeurs en détresse...
    ...et pour toutes ces réponses qui m'ont permis d'avancer.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Look and feel bloc de données Forms
    Par chb30 dans le forum Forms
    Réponses: 2
    Dernier message: 28/01/2010, 11h51
  2. Réponses: 1
    Dernier message: 08/08/2009, 22h32
  3. Réponses: 2
    Dernier message: 14/10/2008, 09h38
  4. Réponses: 5
    Dernier message: 03/08/2007, 10h32
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo