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

PL/SQL Oracle Discussion :

ORA-22913: must specify table name for nested table column or attribute


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut ORA-22913: must specify table name for nested table column or attribute
    Bonjour tout le monde,

    Je suis pas venu depuis un moment sur le forum, j'avais arreter de faire de l'oracle depuis plusieurs annees. Desole pour les accents mais j'ai pas le bon clavier.
    Mais voila aujourd'hui je debarque sur un projet qui reclame de l'expertise, et les DBA sont pas trop aidant dans cette boutique...

    Dans le projet est en Oracle 9i, les gars ont utilise les objects...
    Alors pour vous donnez un peu de background dans ce projet je viens de merger 100 files vieux d'an avec l'actuel code de production.
    Ca m'a pris 2 semaines, biensur les developpeurs qui ont creer les objects ne sont plus la...
    Voila pour le context, ca donne envie...

    Alors il y a un object qui est store dans un table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE OR REPLACE TYPE OBJ_OBJECTA                                                                          AS OBJECT (
            field1                   NUMBER(10),
            ... ,
            MEMBER PROCEDURE procedure1,
            ...
    )
       ALTER TYPE OBJ_OBJECTA
       ADD MEMBER PROCEDURE procedure11
       CASCADE INCLUDING TABLE DATA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE TABLE TABLE1(
         object    OBJ_OBJECTA
    )

    je n'ai aucun problem pour creer l'object, mais lorsque j'essaye de creer la table je tombe sur l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORA-22913: must specify table name for nested table column or attribute
    Alors dans mon exemple j'ai biensur supprime beaucoups de chose.
    Tout l'histoire est que le code de l'application est passe sur ces objects.
    la methode "procedure11" est la nouvelle feature, je dois donc etre capable de modify cet object...

    Je suis pas sur d'etre clair, si vous avez des questions, des idees, je suis a l'ecoute.

    Merci
    Superfly

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Dans les attributs de ton objet, tu dois avoir au moins un tableau, non ?

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    Oui pardon, dans les attributs de mon objet j'ai deux attributs referencant deux autres objects.

    Tu as une idee?

    Merci
    Superfly

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Oui, j'ai rencontré ce soucis avec les tableaux, il semble qu'il en soit de même avec les objets.

    En fait Oracle veut un nom de table pour chaque colonne qu'il va stocker comme un type "complexe" : objet, tableau...

    Essaie de rajouter une clause NESTED TABLE pour chaque objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE TABLE1(
         objA    OBJ_OBJECTA
    )
    NESTED TABLE objA STORE AS TABLE1_OBJA;
    Ah voilà j'ai trouvé l'exemple qu'il faut dans la doc .

    Ca marche ?

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    Le probleme est que je peux pas updater/alterer l'object. Ces objects sont en production depuis des annees, et tres peu de maintenance est faites sur eux.

    Donc je ne peux pas ajouter de Nested table, car meme si technique je trouvais le moyen de le faire il faudrait ensuite que je modifie toute l'application, ce qui est impossible.

    Je ne comprends meme pas comment ils ont pu faire pour creer ces objects sans nested table, et inserer les object directement dans une table normal...

    Le projet existait en Oracle 8i, peut-etre que c'etait possible a l'epoque mais plus en 9i?

    Je ne sais pas du tout je suis bien perdus, dans ce truc...

    Superfly

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par rbaraer Voir le message
    Oui, j'ai rencontré ce soucis avec les tableaux, il semble qu'il en soit de même avec les objets.

    En fait Oracle veut un nom de table pour chaque colonne qu'il va stocker comme un type "complexe" : objet, tableau...
    ...
    C'est un peu trop de dire ça
    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 type dept_scalar_type AS object (
    DEPTNO  NUMBER(2),
    DNAME   VARCHAR2(14),
    LOC     VARCHAR2(13)
    )
    /
    create table test_obj (
      dept_obj dept_scalar_type
    )
    /
    insert into test_obj values(dept_scalar_type(1, 'Test', 'Test location'))
    /

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Citation Envoyé par mnitu Voir le message
    C'est un peu trop de dire ça
    Oui désolé c'était un raccourci malencontreux. Je n'avais effectivement eu le soucis que sur des tableaux jusqu'ici. D'ailleurs l'exemple sur lequel je pointe concerne bien un tableau d'objets et pas un objet seul. Merci pour le correctif.

    J'en reviens donc à ma première question y-a-t-il un tableau quelque part ? En tant qu'attribut d'un des objets par exemple ? Dans ce cas il faut le déclarer en NESTED TABLE dans la requête CREATE TABLE.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/05/2008, 20h28
  2. Réponses: 3
    Dernier message: 07/03/2008, 14h31
  3. Réponses: 6
    Dernier message: 21/02/2008, 12h29
  4. ORA-00903: invalid table name
    Par dngaya dans le forum Administration
    Réponses: 1
    Dernier message: 25/04/2007, 12h01
  5. Erreur lors de CREATE VIEW: must specify column name..
    Par nek_kro_kvlt dans le forum SQL
    Réponses: 1
    Dernier message: 29/09/2006, 10h39

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