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

Interfaces de programmation Oracle Discussion :

[PRO*C] ANSI Dynamic SQL - type objet


Sujet :

Interfaces de programmation Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Par défaut [PRO*C] ANSI Dynamic SQL - type objet
    Bonjour a tous,

    Jai un programme developper en Pro*C qui utilise ANSI Dynamic SQL et fonctionne tres bien pour des tables avec des type primitif, mais jaimerais l'ameliorer pour quil supporte les colonnes de type objet ,varray ou nested table (cree par le user). Voici un morceau de code pour demontrer ce que je veux faire:

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    exec sql begin declare section;
        char  indesc[]="input_descriptor";
        char outdesc[]="output_descriptor";
        int  output_count;
        int occurs, type, len, olen, slen;
        char   data[100][2100], name[100]; 
        unsigned char data2[2100];
        char oname[100], otype[100];
         char stype[100];
        char otype2[] = "child_s";
        struct child_s { char cnmae[3]; };
        typedef struct child_s child_s;
        child_s sdata;
    exec sql end declare section;
     
    /* connection has been established */
     
    exec sql prepare s from :sql_statement;
     
    exec sql declare c cursor for s;
     
    exec sql describe output s using descriptor global :outdesc;
     
    exec sql get descriptor global :outdesc :output_count = count;
     
    for (i = 0; i < output_count; i++)
    {
       occurs = i + 1;
       exec sql get descriptor global :outdesc value :occurs :type = type, :name = name, :len = length,
                      :otype = user_defined_type_name, :olen = user_defined_type_name_length,
                      :stype = user_defined_type_schema, :slen = user_defined_type_schema_length;
     
       if (type == 108) { /* handle object type oracle type code = 108 */
          /* set the struct variable and error encountered  */
    	exec sql set descriptor global :outdesc value :occurs user_defined_type_name = :otype2,                            
               user_defined_type_name_length = :olen, data = :sdata;
       }
       else { /* handle non-object type and convert to char type - it works */
           type = 5;
           exec sql set descriptor global :outdesc value :occurs type = :type, ref data = :data[i];
       }
    }
     
        exec sql whenever not found goto end_select_loop;
     
        for (;;)
        {
            exec sql fetch c into descriptor global :outdesc;
     
            printf("\nready to print data - ");
     
            for (i = 0; i < output_count; i++)
            {
                occurs = i + 1;
                if (type == 108) 
                {
                     printf("Object encountered");
                }
                else
                {
                      printf("%d ", len);
                      printf("%-*.*s ", 9, 9, data[i]);
                      printf("%-*.*s ", 9, 9, sdata);
                } 
            }
        }
    ce que jaimerais faire est dafficher le contenu de ma table

    je tente de trouver des infos et surtout des examples, mais sans succes ...jai sais qu'un type objet est de type 108 mais a peut pres tout ce que je trouve...a laide!

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Salut,

    Documentation sur la manipulation des objets en PRO*C (HTML)

    Sinon c'est dans la Doc PDF (chapitre 17)

    PS : je n'utilise les objets qu'en OCI... Je ne peux donc te donner plus d'infos que les références aux docs...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Par défaut
    merci de ta reponse mais jai deja passer au travers de ces documentations...et elles sont tres pauvre en matiere de user defined types.

    For the object types that you have defined yourself, use Oracle TYPE equal to 108. For an object type column, use a DESCRIBE statement to obtain USER_DEFINED_TYPE_VERSION, USER_DEFINED_TYPE_NAME, USER_DEFINED_TYPE_NAME_LENGTH, USER_DEFINED_TYPE_SCHEMA, and USER_DEFINED_TYPE_SCHEMA_LENGTH.
    C'est principalement la seule info que lon y retrouve

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Tu as la démo inhdemo1.pc fournie avec ta config Oracle dont le source se aussi dans les doc...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

Discussions similaires

  1. [PL/SQL] Type RAW?
    Par sali dans le forum Oracle
    Réponses: 2
    Dernier message: 02/02/2006, 09h58
  2. Réponses: 1
    Dernier message: 25/01/2006, 10h30
  3. [PL/SQL] : type record et FORALL
    Par PpPool dans le forum Oracle
    Réponses: 10
    Dernier message: 18/10/2005, 19h35
  4. Variable globale - PL/SQL - %TYPE
    Par ogre dans le forum PL/SQL
    Réponses: 25
    Dernier message: 20/10/2004, 13h47
  5. PL/SQL TYPE DE DONNEES HEURE
    Par mimi_été dans le forum PL/SQL
    Réponses: 3
    Dernier message: 18/10/2004, 16h33

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