Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment résoudre ORA-01795 dans le code Java

Il existe trois manières potentielles de contourner cette limite :

1) Comme vous l'avez déjà mentionné :divisez la déclaration en lots de 1000

2) Créez une table dérivée en utilisant les valeurs, puis joignez-les :

with id_list (id) as (
  select 'V1' from dual union all
  select 'V2' from dual union all
  select 'V3' from dual
)
select *
from the_table
where column_name in (select id from id_list);

alternativement, vous pouvez également joindre ces valeurs - peut-être même plus rapidement :

with id_list (id) as (
  select 'V1' from dual union all
  select 'V2' from dual union all
  select 'V3' from dual
)
select t.*
from the_table t
  join id_list l on t.column_name = l.id;

Cela génère toujours une déclaration vraiment, vraiment énorme, mais n'a pas la limite de 1000 identifiants. Cependant, je ne sais pas à quelle vitesse Oracle analysera cela.

3) Insérez les valeurs dans une table temporaire (globale) puis utilisez un IN clause (ou une clause JOIN ). Ce sera probablement la solution la plus rapide.