PL/SQL : Utilisation d'une variable de type table dans un select
Bonjour,
Je suis débutant en plsql, et voici ce que je souhaite faire :
1) effectuer un select sur une table pour déterminer une liste de rejet,
2) stocker les rowid de ces lignes dans une variable table
3) effectuer un update sur la table en excluant ces rowid.
Pour cela, j'emploi la démarche suivante (et ça ne marche pas ...):
Code:
1 2 3 4 5 6 7 8 9 10 11
|
-- Décalration du tableau
TYPE rec_rowid IS RECORD (idrow ROWID);
TYPE list_rowid IS TABLE OF rec_rowid INDEX BY BINARY_INTEGER;
t_list_rowid list_rowid;
-- REQUETE 1 : Récuperation des éléments en rejets
Select T1.ROWID BULK COLLECT INTO t_list_rowid from TABLE1 T1 where (select count(T2.CHAMP1) from TABLE2 T2, TABLE3 T3 where CONDITIONS) > 1;
-- REQUETE 2 : Mise à jour des éléments sauf rowid en rejet
update TABLE1 T1 set T1.CHAMP1 = (select distinct(T3.CHAMP1) from TABLE3 T3, TABLE2 T2 where CONDITIONS) WHERE p.rowid not in (select idrow from t_list_rowid); |
La condition en rouge génére l'erreur suivante : PL/SQL: ORA-00942: Table ou vue inexistante.
J'ai également essayé la forme suivante :
Code:
AND T1.rowid not in t_list_rowid
Mais ça génére l'erreur suivante : PLS-00382: expression du mauvais type
Existe il un moyen d'utiliser mon tableau comme je le souhaite (utilisation d'une variable de type TABLE comme un objet table oracle) ?
PS : en raison du volume de la table 1 (300 Millions de rows), impossible d'imbriquer la requete 1 dans la requete 2
Code:
AND T1.rowid not in (Requete 1)