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 :

Requête qui marche sur 11.1 mais pas 11.2


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut Requête qui marche sur 11.1 mais pas 11.2
    Bonjour,

    J'ai la table suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> desc Matable                                    
    Name                    Null?    Type           
    ----------------------- -------- -----------    
    ID                      NOT NULL NUMBER         
    ENTITYID                         NUMBER         
    PROPERTYIDPARENT                 NUMBER         
    SEQUENCE                         NUMBER(9)      
    PROPERTYKEY                      NUMBER(4)
    qui est dérivé du type de table suivant :
    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
     
    SQL> desc Matable_type                          
    Matable_type is NOT FINAL                       
    Matable_type is NOT INSTANTIABLE                
    Name                   Null?    Type            
    ---------------------- -------- ------------
    ID                              NUMBER      
    ENTITYID                        NUMBER      
    PROPERTYIDPARENT                NUMBER      
    SEQUENCE                        NUMBER(9)   
    PROPERTYKEY                     NUMBER(4)   
     
    METHOD                                          
    ------                                          
    MEMBER FUNCTION GETTYPE RETURNS VARCHAR2        
    GETTYPE IS NOT INSTANTIABLE                     
     
    METHOD                                          
    ------                                          
    MEMBER FUNCTION GETASSTRING RETURNS VARCHAR2    
    GETASSTRING IS NOT INSTANTIABLE
    La requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT LEVEL, p.PropertyIdParent, p.Sequence, p.Id, p.PropertyKey, VALUE(p).GetType(), VALUE(p).GetAsString() 
    FROM Matable p 
    CONNECT BY PRIOR p.Id = p.PropertyIdParent 
    AND p.EntityId = 8356 
    START WITH p.PropertyIdParent IS NULL 
    AND p.EntityId = 8356 ORDER BY LEVEL
    marche sur une version 11.1.0.6.0 mais pas sur une 11.2.0.1.0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SQL> SELECT LEVEL, p.PropertyIdParent, p.Sequence, p.Id, p.PropertyKey, VALUE(p).GetType(), VALUE(p).GetAsString() 
    FROM Matable p 
    CONNECT BY PRIOR p.Id = p.PropertyIdParent 
    AND p.EntityId = 8356 
    START WITH p.PropertyIdParent IS NULL 
    AND p.EntityId = 8356 ORDER BY LEVEL
    ;
    SELECT LEVEL, p.PropertyIdParent, p.Sequence, p.Id, p.PropertyKey, VALUE(p).GetType(), VALUE(p).GetAsString()
                                                                                                 *
    ERROR at line 1:
    ORA-00904: "P": invalid identifier
    J'ai bien créé la table a l'identique, les types associés aussi ... bref je suis dans le flou le plus total ... sachant que la requête suivante, elle marche sur les 2 bdd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT p.PropertyIdParent, p.Sequence, p.Id, p.PropertyKey, VALUE(p).GetType(), VALUE(p).GetAsString() 
    FROM Matable p
    Quelqu'un aurait une idée ?
    Si il manque de infos, n'hésitez pas.

    Merci d'avance.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Donc dans la 11GR2, il ne faut plus utiliser le connect by prior que l'on connaissait depuis longtemps. Par contre la syntaxe reste compatible avec des tables 'normales' mais pas avec des tables de type objet.

    Bref, je pense que j'ai trouvé comment faire marcher ma requête, il faut maintenant que je passe sur tout mon code pour modifier mes requêtes récursives.

    Pour info voici la syntaxe qui ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT LEVEL, p.PropertyIdParent, p.Sequence, p.Id, p.PropertyKey, VALUE(p).GetType(), VALUE(p).GetAsString() 
    FROM EntityProperty p 
    CONNECT BY PRIOR p.Id = p.PropertyIdParent 
    START WITH p.PropertyIdParent IS NULL 
    AND p.EntityId = 27201
    ORDER BY LEVEL
    et celle qu'il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    with myt (PropertyIdParent, Sequence, Id, PropertyKey, xlevel, GetType, GetAsString) as
    (
    	SELECT p.PropertyIdParent, p.Sequence, p.Id, p.PropertyKey, 1, VALUE(p).GetType(), VALUE(p).GetAsString()
    	FROM EntityProperty p 
    	where PropertyIdParent IS NULL 
    	AND EntityId = 27306
    	union all
    	select p1.PropertyIdParent, p1.Sequence, p1.Id, p1.PropertyKey, xlevel+1, VALUE(p1).GetType(), VALUE(p1).GetAsString()
    		from EntityProperty p1, myt 
    		where p1.PropertyIdParent = myt.Id
    )
    select PropertyIdParent, Sequence, Id, PropertyKey,xlevel,GetType, GetAsString from myt;
    Il faut que je valide un peu plus pour être sûr que ces 2 requêtes font bien la même chose mais c'est un bon début.

    Merci à mes collaborateurs et à moi même pour cette réponse

  3. #3
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par dbaenbois Voir le message
    ...
    Merci à mes collaborateurs et à moi même pour cette réponse
    On est jamais mieux servi que par soi meme

    Bref, le With est devenu récursif en 11gR2 ce qui permet de résoudre des requêtes hiérarchique à l’image de ce que des autres SGBD savait déjà faire (Recursive Subquery Factoring).

    Mais cella ne signifie pas que
    Donc dans la 11GR2, il ne faut plus utiliser le connect by prior que l'on connaissait depuis longtemps. Par contre la syntaxe reste compatible avec des tables 'normales' mais pas avec des tables de type objet.
    Contactez plutôt Oracle pour vous assurer qu’il ne s’agit pas tout simplement d’un bug avant de vous lancer dans la mythologie.

Discussions similaires

  1. [AC-2007] problème de code qui marche sur un pc mais pas tous
    Par rominous41 dans le forum VBA Access
    Réponses: 4
    Dernier message: 28/06/2011, 09h07
  2. Code qui marche sur un poste mais pas sur un autre
    Par TOSCAN dans le forum Langage
    Réponses: 5
    Dernier message: 11/06/2008, 21h09
  3. Réponses: 6
    Dernier message: 30/05/2008, 17h03
  4. Réponses: 8
    Dernier message: 19/05/2008, 09h00
  5. Réponses: 5
    Dernier message: 02/10/2006, 19h24

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