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.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  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 : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  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.
    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 orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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 : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    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, 22h47
  2. Réponses: 2
    Dernier message: 11/04/2008, 22h58
  3. Récuperer la valeur retournée d'une fonction.
    Par TryExceptEnd dans le forum Langage
    Réponses: 41
    Dernier message: 03/07/2007, 14h49
  4. Réponses: 4
    Dernier message: 07/04/2007, 20h02
  5. valeur retournée par une fonction
    Par Biosox dans le forum C
    Réponses: 13
    Dernier message: 19/01/2007, 23h17

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