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 :

type de données non valide dans un cast


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut type de données non valide dans un cast
    J'ai une table TRANSAC qui contient des transactions et une table TRANSAC_DETAIL qui contient les détails des transactions. Elles sont liées par l'id TRANSAC_ID. J'ai besoin d'effectuer plusieurs requêtes pour chacunes des transactions (ou presque). Les deux tables sont énormes (plusieurs millions de lignes). Pour une question de performance je voudrais récupérer tous les détails de la transaction courante dans une table temporaire ("l_transac") et faire mes requêtes dessus (plutôt que sur la table TRANSAC_DETAIL). Voici mon code:

    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
    22
    23
    24
    25
    DECLARE
        TYPE transac_aat IS TABLE OF TRANSAC_DETAIL%
        l_transac transac_aat;
    BEGIN
        FOR trans IN ( SELECT TRANS_ID, TAX_CODE
                            FROM TRANSAC
                            WHERE DISPATCH_CODE3='2SPLIT' )
        LOOP
            SELECT *
            BULK COLLECT INTO l_transac
            FROM TRANSAC_DETAIL
            WHERE TRANS_ID=trans.TRANS_ID;
     
            FOR line IN (SELECT *
                             FROM TABLE(CAST(l_transac AS transac_aat)) )
            LOOP
     
                [ ... ]
     
            END LOOP;
     
                [ .... ]
     
        END LOOP;
    END;
    Je récupère une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ORA-06550: Ligne 38, colonne 59 :
    PL/SQL: ORA-00902: type de données non valide
    ORA-06550: Ligne 38, colonne 21 :
    PL/SQL: SQL Statement ignored
    Le type "transac_aat" n'est pas accepté dans la cast.

    Une idée du pourquoi?

    Oracle: 10.2.0.4

  2. #2
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 357
    Points : 280
    Points
    280
    Par défaut
    heu et sans le cast ca ne fonctionne pas ?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut non
    Sans le cast

    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
    DECLARE
        TYPE transac_aat IS TABLE OF TRANSAC_DETAIL%ROWTYPE;
        l_transac transac_aat;
    BEGIN
        FOR trans IN ( SELECT TRANS_ID, TAX_CODE
                            FROM TRANSAC
                            WHERE DISPATCH_CODE3='2SPLIT' )
        LOOP
            SELECT *
            BULK COLLECT INTO l_transac
            FROM TRANSAC_DETAIL
            WHERE TRANS_ID=trans.TRANS_ID;
     
            FOR line IN (SELECT * FROM TABLE(l_transac))
            LOOP
                DBMS_OUTPUT.PUT_LINE(line.NAME);
            END LOOP;
        END LOOP;
    END;
    J'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ORA-06550: Ligne 14, colonne 41 :
    PLS-00642: types de collecte locale interdite dans les instructions SQL
    ORA-06550: Ligne 14, colonne 35 :
    PL/SQL: ORA-22905: impossible d'accéder aux lignes d'un élément qui n'appartient pas à une table imbriquée
    ORA-06550: Ligne 14, colonne 21 :
    PL/SQL: SQL Statement ignored
    ORA-06550: Ligne 16, colonne 34 :
    PLS-00364: utilisation de variable d'index boucle 'LINE' invalide
    ORA-06550: Ligne 16, colonne 13 :
    PL/SQL: Statement ignored
    Comment faire si mon type n'est pas accepté? Dois-je déclarer un type global? Et comment faire?

  4. #4
    Membre actif
    Inscrit en
    Juillet 2007
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 357
    Points : 280
    Points
    280
    Par défaut
    desolé je t avou t avoir repondu plsu pour etre dans la discussion et attendre comme toi la resolution car ca m interesse

Discussions similaires

  1. Réponses: 59
    Dernier message: 22/07/2011, 10h32
  2. Type de données des datatables dans dataset
    Par hellspawn_ludo dans le forum Accès aux données
    Réponses: 4
    Dernier message: 21/04/2007, 10h43
  3. [CRXI] Types de données non compatibles
    Par KaNos_Isterik dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 23/03/2007, 11h01
  4. Arborescence non valide dans le .htaccess
    Par dacid dans le forum Apache
    Réponses: 3
    Dernier message: 28/07/2006, 13h45
  5. Réponses: 4
    Dernier message: 01/07/2005, 16h20

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