Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/07/2008, 13h06   #1
Nouveau Membre du Club
 
Inscription : décembre 2003
Messages : 102
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 102
Points : 25
Points : 25
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 :
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 :
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 :
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
superfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 15h35   #2
Membre confirmé
 
Inscription : janvier 2006
Messages : 178
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : janvier 2006
Messages : 178
Points : 208
Points : 208
Dans les attributs de ton objet, tu dois avoir au moins un tableau, non ?
rbaraer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 16h35   #3
Nouveau Membre du Club
 
Inscription : décembre 2003
Messages : 102
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 102
Points : 25
Points : 25
Oui pardon, dans les attributs de mon objet j'ai deux attributs referencant deux autres objects.

Tu as une idee?

Merci
Superfly
superfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 16h57   #4
Membre confirmé
 
Inscription : janvier 2006
Messages : 178
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : janvier 2006
Messages : 178
Points : 208
Points : 208
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 :
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 ?
rbaraer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 17h25   #5
Nouveau Membre du Club
 
Inscription : décembre 2003
Messages : 102
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 102
Points : 25
Points : 25
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
superfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2008, 17h30   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
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 :
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'))
/
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2008, 09h48   #7
Membre confirmé
 
Inscription : janvier 2006
Messages : 178
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : janvier 2006
Messages : 178
Points : 208
Points : 208
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.
rbaraer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h18.


 
 
 
 
Partenaires

Hébergement Web