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 07/06/2011, 15h22   #1
Membre éclairé
 
Inscription : janvier 2009
Messages : 318
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : janvier 2009
Messages : 318
Points : 355
Points : 355
Envoyer un message via MSN à wakan
Par défaut table(procedure()) ORA-22905 : Table imbriquée

Bonjour,
Je suis débutant en Oracle.

J'ai deux base de données :
Base 1 :
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE	10.2.0.4.0	Production
TNS for 64-bit Windows: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
Base 2 :
Oracle Database 10g Release 10.2.0.4.0 - Production
PL/SQL Release 10.2.0.4.0 - Production
CORE	10.2.0.4.0	Production
TNS for 32-bit Windows: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
Maintenant que le contexte est posé, voici mon problème.
J'ai un package qui marche sans probleme sur la base 1.
Je fais un copier coller du package sur la base 2.
À la compilation, j'obtiens l'erreur suivante :
Citation:
PL/SQL: ORA-22905: impossible d'accéder aux lignes d'un élément qui n'appartient pas à une table imbriquée.
Logiciel pour compiler : Toad.
Code :
SELECT * BULK COLLECT INTO ListeCompteur FROM TABLE(Get_ALL_COMPTEUR());
Voilà la ligne de l'erreur.
C'est la première fois dans mon package que j'utilise la fonction table(procedure()).
Et quand je supprime cette partie en erreur de mon package (pour les tests).
La prochaine erreur est lors de la prochaine utlisation de table(procedure()).

Est-ce qu'il y a des prérequis pour utiliser table(procedure()) ?
Pas forcément évident à retrouver sur google.

Est-ce que quelqu'un sait résoudre cette erreur ?

Merci de votre aide.

Je restes disponnible pour toutes informations complémentaires.
wakan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 15h49   #2
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
bonjour,

appartient à la base 2?
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/06/2011, 16h06   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 311
Points : 5 810
Points : 5 810
Get_ALL_COMPTEUR() est une fonction qui est soit pipelined soit renvoie un type tableau. Pour que ça marché vous devez identifier et copier à partir de la première base le type utilisé par le package.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/06/2011, 16h13   #4
Membre éclairé
 
Inscription : janvier 2009
Messages : 318
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : janvier 2009
Messages : 318
Points : 355
Points : 355
Envoyer un message via MSN à wakan
Merci de vos réponse si rapide.
J'ai donc oublié de préciser que Get_ALL_COMPTEUR() faisait partie du package.
Elle marche donc bien sur la base 1.
Ca devrait être de même sur la base 2.
Je mets quand même la définition.

Code :
1
2
3
4
5
6
7
8
9
TYPE TRecCOMPTEURCONSO
IS
  RECORD ( TYPE_CPT LOG_PERFORMANCE.TYPE_CPT%TYPE);
 
TYPE TTRecCOMPTEURCONSOusableInSql
IS
  TABLE OF TRecCOMPTEURCONSO ;
 
FUNCTION Get_ALL_COMPTEUR RETURN TTRecCOMPTEURCONSOusableInSql  PIPELINED;
Je pense donc que les conditions sont bien remplies.

Merci de votre aide.
wakan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 16h35   #5
Membre expérimenté
 
Homme Mohamed Houri
Inscription : mars 2010
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Mohamed Houri
Localisation : France

Informations forums :
Inscription : mars 2010
Messages : 286
Points : 563
Points : 563
Citation:
Envoyé par wakan Voir le message
Bonjour,
Je suis débutant en Oracle.


Logiciel pour compiler : Toad.
Code :
SELECT * BULK COLLECT INTO ListeCompteur FROM TABLE(Get_ALL_COMPTEUR());
Voilà la ligne de l'erreur.
C'est la première fois dans mon package que j'utilise la fonction table(procedure()).
Et quand je supprime cette partie en erreur de mon package (pour les tests).
La prochaine erreur est lors de la prochaine utlisation de table(procedure()).

Est-ce qu'il y a des prérequis pour utiliser table(procedure()) ?
Pas forcément évident à retrouver sur google.

Est-ce que quelqu'un sait résoudre cette erreur ?

Merci de votre aide.

Je restes disponnible pour toutes informations complémentaires.
Ce matin j'ai répondu il me semble au même problème dans otn

http://forums.oracle.com/forums/mess...641727#9641727

Vous ne pouvez selectionner qu'à partir de TYPES SQL que vous créez dans la base de données (create type ....) et non à partir des TYPES PL/SQL (type my_type is ...)

Mohamed Houri
Mohamed.Houri est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/06/2011, 16h48   #6
Membre éclairé
 
Inscription : janvier 2009
Messages : 318
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : janvier 2009
Messages : 318
Points : 355
Points : 355
Envoyer un message via MSN à wakan
Bonjour,
Merci beaucoup pour la réponse. Je vais étudier cela avec attention.

Je vais aussi verifier si sur la base 1, il y a des types particuliers qui ont été crées pour faire les requêtes table(procedure()).
Est ce que quelqu'un sait comment faire. Sinon google est mon ami.

Par contre, si les types ne sont pas définis dans la base 1, je ne comprend toujours pas pourquoi ca marche dans la base 1 et pas dans la base 2.
wakan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 18h06   #7
Membre éclairé
 
Inscription : janvier 2009
Messages : 318
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : janvier 2009
Messages : 318
Points : 355
Points : 355
Envoyer un message via MSN à wakan
Quelques nouvelles afin de faire avancer.

Après recherche, lors de la compilaion du package avec Toad, il crée les type de base tout seul (bizzare).

Cela dit, pour la base 2, les types sont créés en erreur.
Peut-être un problème de configuration de Toad.
Enfin ça reste une hypothèse.

Si vous avez déjà eu ce problème n'hésitez pas.

Merci.
wakan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 18h24   #8
Membre éclairé
 
Inscription : janvier 2009
Messages : 318
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : janvier 2009
Messages : 318
Points : 355
Points : 355
Envoyer un message via MSN à wakan
Desolé je fais beaucoup de double post mais je note mon cheminement pour les suivants qui auraont le meme problème.

Pour la création des type
Code :
CREATE type schema.name AS TABLE of schema."name du type fils"
Erreur : Référence de sous programme ou de cursor Schema est hors étendue.
wakan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 22h58   #9
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Comment as tu créé le type fils ? Est il dans le même schema ?
Code :
1
2
3
4
5
6
7
8
9
10
11
SQL> CREATE OR REPLACE type titi AS object (c1 int, c2 varchar2(10)) 
  2  /
 
Type created.
 
SQL> CREATE OR REPLACE type toto AS TABLE of titi 
  2  /
 
Type created.
 
SQL>
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 08h18   #10
Membre éclairé
 
Inscription : janvier 2009
Messages : 318
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : janvier 2009
Messages : 318
Points : 355
Points : 355
Envoyer un message via MSN à wakan
Bonjour,
Merci de ta participation.
Le fils a etait crée avec toad.
La requete effectué est la suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
 
CREATE OR REPLACE
type       LOG.SYS_PLSQL_88160_60_1 AS object (TYPE_CPT VARCHAR2(255 CHAR));
/
 
 
CREATE OR REPLACE
type       LOG.SYS_PLSQL_88160_48_1 AS TABLE of LOG."SYS_PLSQL_88160_13_1";
 
/
wakan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h36.


 
 
 
 
Partenaires

Hébergement Web