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

Apex Oracle Discussion :

Nombre de caractères dans une LOV


Sujet :

Apex Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 360
    Par défaut Nombre de caractères dans une LOV
    Bonjour tout le monde

    Je développe sous apex depuis un peu plus de 4 ans mais aujourd'hui je suis bloqué sur une LOV pour une Liste Select

    Ma requête pour cette LOV fait 7174 caractères mais les LOV sont limitées a 4000 caractères.
    Quelqu'un sait comment augmenter cette taille??

    Merci pour votre aide

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Je ne pense pas que ce soit possible d'augmenter la taille.

    Erreur en mettant une requête SQL de plus de 4000 car : "ORA-01461: can bind a LONG value only for insert into a LONG column "

    Par contre, tu peux modifier ta requête de LOV pour en faire une function de type PIPELINED http://sheikyerbouti.developpez.com/...age=Chap4#L4.4
    Du coup, la définition dans Apex sera courte, et tu peux mettre ce que tu veux en PLSQL.

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 360
    Par défaut
    Merci pour cette piste

    Je vais voir ce que ça donne.

    Si je n'y arrive pas, pourras-tu me donner un exemple de fonction et comment l'appeler dans Apex ?

    Je commence par regarder ton lien
    Merci

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bien sur, si tu n'y arrives pas, je te ferai un exemple, le forum sert à ça

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 360
    Par défaut
    Voici ou j'en suis :

    on va dire que ça c'est ma requête qui fait 7000 caractère :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select b.BAT_LIBELLE as display_value
          , b.BAT_CDN as return_value
      from MOUV65.BATIMENT b

    J'ai créer 2 objet comme le disais ton lien
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create type AGENT_P10 as object (lib_bat varchar2(64), cdn_bat number(8)) ;
     
    create type tab_agent_P10 as table of AGENT_P10 ;

    ensuite j'ai créer la fonction suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    CREATE OR REPLACE FUNCTION "MOUV65"."LOV_AGENT_P10_V1" (cur_lig in SYS_REFCURSOR)
    return tab_agent_P10 PIPELINED
    IS
      LBat AGENT_P10 := AGENT_P10 (null, null);
      RBat MOUV65.BATIMENT%rowtype;
    BEGIN
      Loop
        Fetch cur_lig into RBat;
        Exit when cur_lig%notfound;
          --manip des données --
          LBat.lib_bat := RBat.BAT_LIBELLE;
          LBat.cdn_bat := RBat.BAT_CDN;
          --retour des valeurs --
          PIPE ROW (LBat);
      END LOOP;
      Return;
    END;

    Le problème c'est que quand je veux utiliser tout ça pour l'instant je dois utiliser :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select lib_bat, cdn_bat from
    table(LOV_AGENT_P10_V1(cursor(select * from BATIMENT)))

    Mais si je dois passer tout le cursor en paramètre (mon cursor va etre trop gros pour rentrer dans la LOV

    Je comprend pas comment faire pour pouvoir faire la même chose mais en déclarent mon cursor dans ma fonction et non en paramètre.

    Je sais pas si je suis très claire

    Du coup si tu a un exemple tout simple pour comprendre je suis preneur
    Merci

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Ah.. en fait il manque quelque chose surement dans le tuto.

    Ta fonction peut tout gérer, tu peux y passer des paramètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CREATE OR REPLACE FUNCTION "MOUV65"."LOV_AGENT_P10_V1" (param1 IN NUMBER)
    return tab_agent_P10 PIPELINED
    IS
      LBat AGENT_P10 := AGENT_P10 (null, null);
    BEGIN
      FOR r IN (select b.BAT_LIBELLE as display_value, b.BAT_CDN as return_value
                 from MOUV65.BATIMENT b
                 where bat_cdn = param1)
      Loop
          LBat.lib_bat := r.BAT_LIBELLE;
          LBat.cdn_bat := r.BAT_CDN;
          --retour des valeurs --
          PIPE ROW (LBat);
      END LOOP;
      Return;
    END;
    Ensuite il te suffit d'appeler par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT bat_libelle, bat_cdn
    FROM TABLE ("MOUV65"."LOV_AGENT_P10_V1" (	num))

Discussions similaires

  1. Calcul d'un nombre de caractères dans une chaîne
    Par Thekiller dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2010, 23h21
  2. [Excel] Nombre de caractères dans une plage
    Par fred014 dans le forum Delphi
    Réponses: 20
    Dernier message: 02/03/2007, 21h32
  3. Réponses: 10
    Dernier message: 31/12/2006, 12h35
  4. Réponses: 2
    Dernier message: 17/08/2006, 12h36
  5. limite du nombre de caractères dans une requete
    Par pheno82 dans le forum Access
    Réponses: 3
    Dernier message: 01/06/2006, 22h12

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