sql >> Databasteknik >  >> RDS >> Oracle

Hur man löser ORA-01795 i Java-kod

Det finns tre möjliga sätt att komma runt denna gräns:

1) Som du redan har nämnt:dela upp uttalandet i batcher om 1000

2) Skapa en härledd tabell med hjälp av värdena och sammanfoga dem sedan:

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 också gå med i dessa värden - kanske till och med vara snabbare:

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;

Detta genererar fortfarande ett riktigt, riktigt stort uttalande, men har inte gränsen på 1000 id. Jag är dock inte säker på hur snabbt Oracle kommer att analysera detta.

3) Infoga värdena i en (global) temporär tabell och använd sedan en IN klausul (eller en JOIN ). Detta kommer förmodligen att vara den snabbaste lösningen.



  1. MySQL DATETIME - Ändra endast datumet

  2. Hur man hanterar MySQL-databaser, användare och tabeller från kommandoraden

  3. RODBC-strängen trunkeras

  4. INFOGA eller UPPDATERA bulkdata från dataram/CSV till PostgreSQL-databas