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

SQL Oracle Discussion :

limitation du nombre de variables globales constantes dans un package


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 78
    Points
    78
    Par défaut limitation du nombre de variables globales constantes dans un package
    Bonjour,

    j'utilise des variables globales dans un package (Oracle 10g). Ces variables sont globales au package. Donc je les ai défini dans le BODY, comme suit :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    CREATE OR REPLACE PACKAGE PKG_RCO as
     
    PROCEDURE TOTO(..., ...,...);
    PROCEDURE TITI(..., ...,...);
     
    END PKG_RCO;
    /
    SHOW ERRORS;
     
     
    CREATE OR REPLACE PACKAGE body PKG_RCO as
     
    g_var1  CONSTANT VARCHAR2(5) := 'abcde';
    g_var2  CONSTANT VARCHAR2(5) := 'azert';
    g_var3  CONSTANT VARCHAR2(5) := 'xxxxx';
    etc ...
     
    PROCEDURE TOTO(..., ...,...)
    IS
    BEGIN
         ......
    END TOTO;
     
    END PKG_RCO;
    /
    SHOW ERRORS;
    Mon problème c'est que les dernières variables ne semblent pas affectées, c'est à dire que je peux les utiliser dans mes procédures et fonctions mais que leur valeur est vide ...

    Donc je me demandais s'il y avait un nombre maximum de variables globales dans un package. Pour l'instant j'ai l'impression que les problèmes commencent à 20 variables dans mon cas

    Merci pour vos réponses

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 78
    Points
    78
    Par défaut
    Quelques précisions :

    j'ai exactement 21 variables.

    Je me suis amusé à changer l'ordre dans lequel je les ai déclarées, et là c'est le hasard le plus total.
    Des fois il y en a 18 qui s'affichent, d'autres fois 5 .... bref avec un peu de chance il y a une combinaison qui fait que tout marche ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Points : 388
    Points
    388
    Par défaut
    Personellement je place mes variables globable dans l'entete du package avantla declaration des fonctions et procedures.
    Je les utilise ensuite avec nom_package.nom_variable
    Par contre je n'ai jamais essayé des les initialiser a la creation.
    Mais il me semble que dans l'entete de package tu peu mettre un BEGIN avant le END et placer dedans l'initialisation des variables.
    Cette partie de code n'est lancée que lors du premiere appel au package.

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Je ne crois pas qu'il y a de limitations à 20 sur le nombre de variables globales d'un package (il y a des limitations sur la taille du code généré avec un message d'erreur le cas échéant). Il faut aussi savoir que les variables globales déclarées dans le package body :
    - ne sont initialisées qu'une seule fois (à la première utilisation du package) par session
    - que chaque session qui exécute le package aura ses propres valeurs à priori différentes des valeurs dans une session différentes qui exécute le même package.

    Pouvez-vous nous donner un scénario complet du problème ?

  5. #5
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Big Bug ?

    Bizarre, je n'ai rien trouvé sur METALINK (recherche :package Constant)

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 78
    Points
    78
    Par défaut
    Bon alors j'ai fini par résoudre mon problème en faisant quelques tests ...
    J'avais simplement fait la déclaration suivante :

    g_vc_emt_cso_AC CONSTANT VARCHAR2(1) := 'AR';

    Du coup à partir de cette déclaration, toutes les autres ne sont plus prises en compte.
    C'est à dire que si je mets cette variable en premier, aucune de mes 21 constantes ne seront affectées, alors que si je la mets en dernier, elle seule ne sera pas affectée

    Ce qui est bizarre c'est que la compilation ne me renvoyait aucune erreur quant au fait que je mette 2 caracteres dans un VARCHAR2(1) ...

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    pourquoi les variables ne sont pas dans le package spécification ?

  8. #8
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Un varchar2(1) pour stocker 2 caractères ????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g_vc_emt_cso_AC     CONSTANT VARCHAR2(1) := 'AR';

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par Garuda
    Un varchar2(1) pour stocker 2 caractères ????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g_vc_emt_cso_AC     CONSTANT VARCHAR2(1) := 'AR';
    C'est en écrivant ma réponse que je me suis moi aussi rendu compte de mon erreur ...
    Du coup tu as repondu pendant que j'editais mon dernier message

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

Discussions similaires

  1. Variable global utilisable dans plusieurs Forms
    Par nams2590 dans le forum Visual C++
    Réponses: 13
    Dernier message: 11/12/2007, 11h34
  2. Réponses: 9
    Dernier message: 30/07/2007, 12h16
  3. variable globale fixée dans un registre
    Par gorgonite dans le forum C
    Réponses: 11
    Dernier message: 02/07/2007, 13h42
  4. Réponses: 3
    Dernier message: 25/01/2007, 14h12
  5. [Delphi7]Variable global à lire dans Visual Basic
    Par Shifty44 dans le forum Delphi
    Réponses: 3
    Dernier message: 23/10/2006, 15h51

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