sql >> Database teknologi >  >> RDS >> Oracle

Sådan løses ORA-01795 i Java-kode

Der er tre mulige måder at omgå denne grænse på:

1) Som du allerede har nævnt:del opgørelsen op i batches af 1000

2) Opret en afledt tabel ved hjælp af værdierne og foren derefter dem:

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);

alternativt kan du også tilslutte dig disse værdier - måske endda hurtigere:

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;

Dette genererer stadig en virkelig, virkelig stor erklæring, men har ikke grænsen på 1000 id'er. Jeg er dog ikke sikker på, hvor hurtigt Oracle vil analysere dette.

3) Indsæt værdierne i en (global) midlertidig tabel, og brug derefter en IN klausul (eller en JOIN ). Dette vil sandsynligvis være den hurtigste løsning.



  1. Kan den samme kolonne have primær nøgle &fremmednøgle begrænsning til en anden kolonne

  2. MySql får optegnelser eller data dagligt, ugentligt, månedligt og årligt

  3. nolock på en midlertidig tabel i SQL Server 2008

  4. Hvor hurtigt er ODBC? En "belastet" sammenligning.