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:
Je récupère une erreur:
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;
Le type "transac_aat" n'est pas accepté dans la cast.
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
Une idée du pourquoi?
Oracle: 10.2.0.4
Partager