Bonjour à tous,

j'ai petit problème bizarre avec un bout de code que je viens d'écrire, et que je vous soumets. J'essaye de faire un update dans un forall avec une collection et à la compilation j'ai une erreur invalid datatype.

ce qui est bizarre c'est que cette erreur semble d'habitude se produire dans des ordres DDL : ORA-00902

Voici le code:

D'abord j'ai créé les types et variable suivants
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
TYPE negs IS RECORD (
    nucon  hisneg.nucon%type,
    coinf  hisneg.coinf%type
  );
 
TYPE negs_tab IS TABLE OF negs
    INDEX BY BINARY_INTEGER;
 
waitNegList negs_tab;
ensuite divers traitements, puis le code qui me pose problème:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
select nucon, coinf bulk collect
  into waitNegList
  from bnp_tmp_tradfeed_tmp td
  join (select nubix, nucon, coinf
          from hisneg
        union
        select nubix, nucon, coinf from ficneg) neg on neg.nucon = td.nocon
 where neg.coinf in ('WAITPAR', 'WAITLON')
   and neg.nubix not in (select nubix from anuptf);
 
forall x in waitNegList.first .. waitNegList.last
  update bnp_tmp_tradfeed_tmp
     set coctp = treat(waitNegList(x) as negs).coinf
   where nocon = treat(waitNegList(x) as negs).nucon;
J'ai bien vérifié l'erreur est liée à l'ordre update (quand je le commente la fonction compile bien).
Pour ceux qui se demande à quoi servent les treat, je suis sous oracle 9.2 et je les ajoutés comme workaround à l'erreur PLS-00436 en suivant cette page

Voilà donc quelqu'un saurait il m'expliquer pourquoi j'ai cette erreur et éventuellement comment y remédier?

Merci d'avance.