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 :

Table de tables


Sujet :

Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Table de tables
    Bonjour,

    Je voudrais créer un tableau ayant quelques champs ainsi qu'un tableau associé. Voir l'exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DECLARE
       TYPE Ma_Structure AS OBJECT (
            Champs1    VARCHAR2(10),
            Champs2    VARCHAR2(10),
            Champs3    INTEGER,
            Table          DBMS_SQL.VARCHAR2_TABLE
            );
       TYPE Ma_Structure_tab IS VARRAY(10) OF Ma_structure;
    BEGIN
    ...
    END;
    L'erreur suivante m'est renvoyé:
    PLS-00540: object not supported in this context.

    Est-ce que quelqu'un peut m'aider ou me donner une alternative à cette solution?

    Merci bcp!

  2. #2
    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
    Créez ces types au niveau SQL avec la commande CREATE TYPE.

    ensuite, vous pourrez les utiliser avec PL/SQL

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je viens d'essayer votre solution mais j'ai une autre erreur qui m'est renvoyé:
    PLS-00201: identifier 'DBMS_SQL.VARCHAR2_TABLE' must be declared

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TYPE Ma_Structure AS OBJECT ( 
                        Champs1    VARCHAR2(10), 
                        Champs2    VARCHAR2(10), 
                        Champs3    INTEGER, 
                        Table          DBMS_SQL.VARCHAR2_TABLE 
                        ); 
     
    DECLARE
    ...
    BEGIN
    ...
    END;
    Avez-vous une idée?
    Merci!

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    en direct de la doc (apllication developper guide / object relational features) n'hésite pas à t'y référer pour découvrir les types objets (DBMS_SQL.VARCHAR2_TABLE c'est quoi comme type de données ?!?!?)

    The following example creates a multilevel collection type that is a nested table of nested tables. The example models a system of stars in which each star has a nested table collection of the planets revolving around it, and each planet has a nested table collection of its satellites.

    CREATE TYPE satellite_t AS OBJECT (
    name VARCHAR2(20),
    diameter NUMBER);

    CREATE TYPE nt_sat_t AS TABLE OF satellite_t;

    CREATE TYPE planet_t AS OBJECT (
    name VARCHAR2(20),
    mass NUMBER,
    satellites nt_sat_t);

    CREATE TYPE nt_pl_t AS TABLE OF planet_t;

  5. #5
    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
    Renomez votre colonne Table en autre chose ! (Tab)

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    J'admets que j'ai abandonné l'idée du tableau dans le tableau.
    Toutefois j'ai des difficultés pour gérer un simple tableau à 2 dimensions.

    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
     
    CREATE OR REPLACE TYPE Clean_child AS OBJECT (
            Src_table    VARCHAR2(10),
            Bck_table    VARCHAR2(10),
            Cnt_Delete   INTEGER
            );
     
    DECLARE
     
       Clean_child_tab IS VARRAY(20) OF Clean_child;
       Child_tables Clean_child_tab;
     
    BEGIN
    ...
    END;
    Du coup j'ai le problème suivant:
    PLS-00103: Encountered the symbol "VARRAY" when expecting one of the following:

    constant exception <an identifier>
    <a double-quoted delimited-identifier> table LONG_ double ref
    char time timestamp interval date binary national character
    nchar


    Aute question est: 'Comment vais-je initialiser ce tableau?'

    Je pensais à un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      for i in 1..20 LOOP
        Child_tables(i) := ('VAL1','VAL1CU',0);
      end loop;
    Mais ça n'a pas l'air de marcher. :-(

    Merci!

  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
    Essaye ceci :
    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
    DECLARE
    TYPE Clean_child IS RECORD (Src_table    VARCHAR2(10), 
            Bck_table    VARCHAR2(10), 
            Cnt_Delete   INTEGER 
            ); 
     
     
    Type Clean_child_tab IS TABLE OF Clean_child INDEX BY BINARY_INTEGER;
     
    Child_tables Clean_child_tab;
    BEGIN
    for i in 1..20 LOOP 
        Child_tables(i).Src_table := 'VAL1';
        Child_tables(i).Bck_table := 'VAL1CU;
        Child_tables(i).Cnt_Delete:= 0;
    end loop; 
    END;
    /

  8. #8
    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
    Vous pouvez utiliser des tableaux d'enregistrements à la place de vos tableaux d'objets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Declare
    TYPE TYP_REC IS RECORD( col1, col2,...coln ) ;
    TYPE TYP_TAB_REC IS TABLE OF TYP_REC INDEX BY BINARY_INTEGER ;
    mon_tab TYP_TAB_REC ;
    Begin
      For i IN 1.. 10 Loop
         mon_tab(i).col1 := ... ;
         mon_tab(i).col2 := ... ;
         .....
      End loop ;
      .........
    End ;

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Ca marche... un grand MERCI!
    Je vais finir arriver à faire un truc convenable. ;-)

  10. #10
    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
    Citation Envoyé par zenobe
    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
     
    CREATE OR REPLACE TYPE Clean_child AS OBJECT (
            Src_table    VARCHAR2(10),
            Bck_table    VARCHAR2(10),
            Cnt_Delete   INTEGER
            );
     
    DECLARE
     
       Clean_child_tab IS VARRAY(20) OF Clean_child;
       Child_tables Clean_child_tab;
     
    BEGIN
    ...
    END;
    Du coup j'ai le problème suivant:
    PLS-00103: Encountered the symbol "VARRAY" when expecting one of the following:

    constant exception <an identifier>
    <a double-quoted delimited-identifier> table LONG_ double ref
    char time timestamp interval date binary national character
    nchar

    Merci!
    Il manque le mot clé TYPE devant votre déclaration : Clean_child_tab IS VARRAY(20) OF Clean_child;

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    Citation Envoyé par zenobe
    J'admets que j'ai abandonné l'idée du tableau dans le tableau.
    allez allez faut persévèrer

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour les encouragements... mais bon, je ne cache pas que j'ai quelques difficultés à apréhender le PL/SQL.

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    en tout cas n'oublie pas le tag RESOLU, merci

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

Discussions similaires

  1. [WD17] Table dans table dans table je pense ?!
    Par franck34matlab dans le forum WinDev
    Réponses: 8
    Dernier message: 08/07/2014, 14h06
  2. Optimize table sur table utilisée: LOCK ? COMMIT ?
    Par psychomatt dans le forum Outils
    Réponses: 3
    Dernier message: 25/01/2006, 17h45
  3. Comparaison Table Excel table Mssql
    Par k-lendos dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 01/06/2005, 14h56
  4. DROP table et table fantome
    Par romeo9423 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 07/02/2005, 18h46
  5. [Création de table] 1 table ou plusieurs
    Par Pascal dans le forum Bases de données
    Réponses: 6
    Dernier message: 17/06/2004, 15h12

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