Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como resolver ORA-01795 no código Java


Existem três maneiras possíveis de contornar esse limite:

1) Como você já mencionou:divida o extrato em lotes de 1000

2) Crie uma tabela derivada usando os valores e depois una-os:
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);

alternativamente, você também pode juntar esses valores - pode até ser mais rápido:
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;

Isso ainda gera uma declaração muito, muito grande, mas não tem o limite de 1000 ids. Não tenho certeza de quão rápido o Oracle analisará isso.

3) Insira os valores em uma tabela temporária (global) e use um IN cláusula (ou um JOIN ). Esta provavelmente será a solução mais rápida.