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 ...):
La condition en rouge génére l'erreur suivante : PL/SQL: ORA-00942: Table ou vue inexistante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
J'ai également essayé la forme suivante :
Mais ça génére l'erreur suivante : PLS-00382: expression du mauvais type
Code : Sélectionner tout - Visualiser dans une fenêtre à part AND T1.rowid not in t_list_rowid
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 : Sélectionner tout - Visualiser dans une fenêtre à part AND T1.rowid not in (Requete 1)
Partager