Le bulk collect sur curseur ne fonctionne pas.
Quel version de db faut-il pour utiliser le bulk collect ?
Le bulk collect sur curseur ne fonctionne pas.
Quel version de db faut-il pour utiliser le bulk collect ?
merci de mettre le code qui pose pb et l'erreur en question
voilà le code que j'ai effectué
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 Declare TYPE TYP_TAB_usr IS TABLE OF dams_users%Rowtype ; Tabusr TYP_TAB_usr ; Begin Select * BULK COLLECT Into Tabusr From dams_users ; For i IN Tabusr.first..Tabusr.last Loop dbms_output.put_line( Tabusr(i).SHORT_NAME || ' - ' || Tabusr(i).LONG_NAME ) ; End loop ; End ; The following error has occurred: ORA-06550: line 9, column 10: PLS-00597: expression 'TABUSR' in the INTO list is of wrong type ORA-06550: line 5, column 7: PL/SQL: SQL Statement ignored
et la version de la db est la suivante
Oracle8i Enterprise Edition Release 8.1.7.4.0 - 64bit Production
PL/SQL Release 8.1.7.4.0 - Production
CORE 8.1.7.0.0 Production
TNS for Solaris: Version 8.1.7.4.0 - Production
NLSRTL Version 3.4.1.0.0 - Production
Je crains que la version 8i ne supporte pas les tables d'entregistrements avec le BULK COLLECT.
Par contre cela fonctionne parfaitement en 9i...
Dans votre cas, il ne vous reste plus qu'à décomposer vos tables en champs...
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 Declare TYPE C1 is table of ma_table.champ1%type ; TYPE C2 is table of ma_table.champ2%type ; .... tab1 C1; tab2 C2; ... Begin Select col1, col2,...,col1 BULK COLLECT Into tab1,tab2,...,tabn For col1.first..col1.last Loop ....... End loop ; .... End ;
J'ai tapez ceci et cela ne marche toujours pas.
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 Declare TYPE TYP_TAB_usr IS TABLE OF dams_users%Rowtype ; Tabusr TYP_TAB_usr ; Begin Select SHORT_NAME, LONG_NAME * BULK COLLECT Into Tabusr.SHORT_NAME, Tabusr.LONG_NAME From dams_users ; For i IN Tabusr.first..Tabusr.last Loop dbms_output.put_line( Tabusr(i).SHORT_NAME || ' - ' || Tabusr(i).LONG_NAME ) ; End loop ; End ;
Je crois que vous n'avez pas bien compris.TYPE TYP_TAB_usr IS TABLE OF dams_users%Rowtype ;
Vous ne pouvez pas utiliser de tables d'enregistrements (dams_users%Rowtype dans votre exemple)
Il faut décomposer en CHAMPS comme dans l'exemple fourni juste avant
Partager