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 :

datatype dynamique


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 22
    Points
    22
    Par défaut datatype dynamique
    bonjour,
    je souhaite cree un fct dont le datatype de la valeur retour est fonction des arg que je lui passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE OR REPLACE FUNCTION MA_FCT_TAB
    (
    table_name		 in  VARCHAR2,
    colonne_name			 in  VARCHAR2
    )
    RETURN  table_name.colonne%TYPE
    Avez-vous une solution?

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    A priori, non, ce n'est pas possible !
    Types possibles : http://download-west.oracle.com/docs...ms11.htm#33300
    Création de fonction :
    http://download-west.oracle.com/docs...ms23.htm#34400

    Cependant, il est possible, au sein d'un package, de définir plusieurs fonction ayant le même nom mais des paramètres différents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create or replace package PKG_TEST is
       Function Fonction_Test(pi_Input IN VARCHAR2) RETURN VARCHAR2;
       Function Fonction_Test(pi_Input IN NUMBER) RETURN NUMBER;
    end;
    /
    Est-ce que cela pourrait répondre à vos besoins ? quels sont-ils ?

  3. #3
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    oui, créer plusieurs fonction des même nom dans un package, dont le paramètre entré est de type différent...
    cela s'appelle de la surcharge.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    create or replace package monPackage
    Is
    Function maFonction (pn_Param IN Number) return Number
    ...
     
    Function maFonction (pv_Param IN Varchar2) return Varchar2
    ...
     
    Function maFonction (pd_Param IN Date) return Date
    ...
     
    etc

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    Pour repondre a LeoANDERSON le but est de remplacer un PKG composé de 180 fct dont le seul but est de renvoye la valeur par defaut d'une table(il y en a 180) passe en parametre.
    A chaque nvle table il faut cree la fct qui va renvoye la valeur par defaut de la table!
    c'est un ptit peu loud!!

  5. #5
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    La valeur par défaut d'une table ???
    vous voulez sûrement dire d'une colonne ?
    Dans ce cas, pourquoi ne pas avoir "au pire" une fonction par type de colonne possible et faire du SQL Dynamique ?
    http://sheikyerbouti.developpez.com/execute_immediate/

    Sinon, vous pouvez également (sous réserves qu'il n'y ait pas de types complexes) retourner systématiquement une chaine VARCHAR2 et, grâce à un paramètre OUT récupérer également le type de la colonne ?)

  6. #6
    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
    si si, c'est possible grace au type ANYTYPE

    http://laurent-dardenne.developpez.c...racle-anydata/

    une recherche aurait permis de trouver : http://www.developpez.net/forums/vie...hlight=anytype

    EDIT : je suis pas sûr que ce soit la meilleure méthode pour le package en question

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    merci
    je connais le tutoriel de sheikyerbouti mais je n'avais pas encore trouver la solution :
    A priori je pense recuperer le datatype via execute immediate...using et ensuite utilise une fct par datatype (soit 3fct au total)
    Merci

  8. #8
    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
    et ANYDATA ?

  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
    Sinon, vous pouvez écrire une fontion qui retourne toujours un VARCHAR2(4000) contenant le résultat "casté" puis reconverti dans le bon type au retour de la fonction.

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    AHHHHHH merci de soulevez la question!
    j'ai un peu rien compris au datatype Opaque(pour le coup ça l'est vraiment opaque) et ma solution ne me convient pas !
    comment faire avec le anydata?


    [/code]

  11. #11
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Citation Envoyé par txouki
    AHHHHHH merci de soulevez la question!
    j'ai un peu rien compris au datatype Opaque(pour le coup ça l'est vraiment opaque) et ma solution ne me convient pas !
    comment faire avec le anydata?
    Pour le coup, c'est vous qui êtes opaque !
    Quelle solution ne vous convient pas ?

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    bon ,j'essai d'etre clair j'ai le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    insert into my_table(col1)
    select fct_valeur_defaut_table_name;
    Et il esixte autant de fct_valeur_defaut_table_name qu'il y a de table dans le schema.
    Mon but est d'avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    insert into my_table(col1)
    select fct_valeur_defaut('table_name');
    soit une seule fonction qui prend en parametre le nom de la table .
    Mais je me heurte au type de la valeur retourne qui est en fonction de la table est qui doit etre declarer a la construction.
    J'ai essayé le anydata mais je tombe à l'insertion en' inconsistent type'

  13. #13
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Citation Envoyé par txouki
    A priori je pense recuperer le datatype via execute immediate...using et ensuite utilise une fct par datatype (soit 3fct au total)
    Et cette solution ne vous convient plus ?

    Par contre, ce que vous semblez vouloir faire me laisse perplexe : vous souhaitez gérer "manuellement" les valeurs par défaut des colonnes ???

  14. #14
    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
    +1, ce qui est fait me semble au mieux inutile et sinon sérieusement capilotracté

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    non je me suis enflammé sur la solution
    Comme j'insert immediatement, la valeur retournée doit etre au bon datatype sinon 'ora00xxx:Inconsistent datatype...'
    ne soit pas perplexe! c'est BO (buissness object) qui reclame que toute les valeurs d'une table soit renseignée.
    Du coup on injecte des valeur pas defaut dans les tables.
    (On m'a refilé le bébé!)
    Le procede est stable mais lourd (PKG de 188 fct) et j'essaie que se soit plus propre et le sujet me semble interressant
    merci de vos aides

  16. #16
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Alors, déjà, c'est super cool de nous censurer le n° de l'erreur Oracle ! comme çà, ça nous permet de nous faire des quizz les longues soirées d'hiver pour retrouver l'erreur à partir de son libellé !
    les plus fort y arrivant même avec des libélles en flamand, vous devriez essayer, je suis persuadé qu'on pourra vous répondre plus facilement !

    De plus, ce serait surprenant que BO ne sache pas gérer les null, sinon, vous savez qu'il existe NVL ou les vues ? ce serait plus propre !
    Mais pourquoi donc le DEFAULT natif d'Oracle ne vous convient pas ?

    Et pour finir, il n'y a pas une solution mais au moins 2 :
    • La solution des types opaques
    • La solution d'avoir n fonctions, mais n étant le nombre de types utilisés, pas le nombre de tables impliquées

  17. #17
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    desole pour l'erreur oracle Loe,
    j'ai opte pour la solution de sheikyerbouti avec cast implicite .
    Merci de vos remarque

  18. #18
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    y'a pas de mal !
    l'essentiel, c'est que ça marche ! :-)

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

Discussions similaires

  1. Creation de fiche dynamique
    Par Mouss26 dans le forum C++Builder
    Réponses: 7
    Dernier message: 24/07/2002, 07h56
  2. comment creer un alias dynamique avec BDE et ODBC
    Par david33 dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/07/2002, 11h50
  3. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36
  4. Réponses: 4
    Dernier message: 13/05/2002, 16h43
  5. repertoire temp dynamique
    Par killpilot dans le forum C
    Réponses: 2
    Dernier message: 26/04/2002, 16h19

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