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

Oracle Discussion :

valeur retournée d'une fonction


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 134
    Points : 84
    Points
    84
    Par défaut valeur retournée d'une fonction
    Bonjour,

    J'ai un cas étonnant :

    je crée un fonction retournant un varchar2(10).

    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 get_operator (filename VARCHAR2) RETURN VARCHAR2 AS
    operator_name VARCHAR2(10);
    BEGIN
       IF (filename like 'SOL42_Optimus%') THEN
       	  operator_name := 'Optimus';
       ELSIF (filename like 'SOL42_O2%') THEN
       	  operator_name := 'O2';
       ELSIF (filename like 'SOL42_Mobilkom%') THEN
       	  operator_name := 'Mobilkom';
       ELSIF (filename like 'SOL42_Bt%') THEN
       	  operator_name := 'BT';  	  
       ELSE  operator_name := 'UNDEF';  
       END IF;	 
       return operator_name;   
    END;
    Lorsque je crée une vue en utilisant cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE OR REPLACE VIEW ibr_view (CDR_OPERATOR, FILENAME, STATUS, ERROR_CODE, CDR_COUNTER) AS
    select get_operator(filename), filename, 'SUSPENDED', error_code, count(*)
    	   from SUSPENDED_USAGE_T
    	   		group by get_operator(filename), filename, error_code;
    le champ CDR_OPERATOR de la vue est un varchar2(4000) ??????

    Est-ce normal docteur ?

    Merci pour votre réponse.

  2. #2
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Tu ne précises pas la taille alors il prend la taille par défaut de 4000.

  3. #3
    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
    c'est peut-être aussi parce qu'il met la taille maxi pour pas avoir de problème. Mais VARCHAR2 de 10 ou 4000 quelle importance ? Qui peut le plus peut le moins

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par orafrance
    Mais VARCHAR2 de 10 ou 4000 quelle importance ? Qui peut le plus peut le moins
    Surtout dans une vue

  5. #5
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 134
    Points : 84
    Points
    84
    Par défaut
    J'ai précisé la taille à priori :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE OR REPLACE FUNCTION get_operator (filename VARCHAR2) RETURN VARCHAR2 AS
    operator_name [b]VARCHAR2(10)[/b];
    Je ne peux le préciser dans la ligne create ou replace cela me retourne une erreur.

    Je pense aussi a ton cas orafrance, mais j'ai un applicatif derrière qui aime pas trop les champs de plus de 50 caractères...

    Comment puis-je forcer la création de cette vue avec un varchar2(10) ?

    Merci

  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
    Non, vous n'avez pas précisé de taille car ce n'est pas possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function ... RETURN VARCHAR2 ;
    Vous ne pouvez pas spécifier la taille d'une variable de retour de fonction.

  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
    mais la vue n'aura jamais plus de 10 caractères de toute façon puisque la variable retournée par la fonction est limitée à 10... T'es en train de te compliquer l'existence pour rien

  8. #8
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 134
    Points : 84
    Points
    84
    Par défaut
    ok, je vais devoir faire autrement alors

    merci pour vos réponses

  9. #9
    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
    J'ajouterai que la vue n'a que faire de la taille :

    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
    SQL> create view orafrance (titi varchar2(10)) as
      2  select substr(owner,1,10) from dba_objects;
    create view orafrance (titi varchar2(10)) as
                                *
    ERREUR à la ligne 1 :
    ORA-00907: Parenthèse de droite absente
     
     
    SQL> create view orafrance (titi) as
      2  select substr(owner,1,10) from dba_objects;
     
    Vue créée.
     
    SQL> desc orafrance
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ----------------------------
     TITI                                               VARCHAR2(10)

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

Discussions similaires

  1. Valeur retournée par une fonction
    Par defluc dans le forum Langage
    Réponses: 15
    Dernier message: 04/05/2009, 23h47
  2. Réponses: 2
    Dernier message: 11/04/2008, 23h58
  3. Récuperer la valeur retournée d'une fonction.
    Par TryExceptEnd dans le forum Langage
    Réponses: 41
    Dernier message: 03/07/2007, 15h49
  4. Réponses: 4
    Dernier message: 07/04/2007, 21h02
  5. valeur retournée par une fonction
    Par Biosox dans le forum C
    Réponses: 13
    Dernier message: 20/01/2007, 00h17

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