sql >> Base de Datos >  >> RDS >> Oracle

Cómo resolver ORA-01795 en código Java

Hay tres posibles formas de sortear este límite:

1) Como ya ha mencionado:divida la declaración en lotes de 1000

2) Cree una tabla derivada usando los valores y luego únalas:

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, también podría unir esos valores, incluso podría ser más 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;

Esto todavía genera una declaración realmente enorme, pero no tiene el límite de 1000 ID. Sin embargo, no estoy seguro de qué tan rápido Oracle analizará esto.

3) Inserte los valores en una tabla temporal (global) y luego use un IN cláusula (o una cláusula JOIN ). Esta será probablemente la solución más rápida.