Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So lösen Sie ORA-01795 im Java-Code auf

Es gibt drei Möglichkeiten, diese Grenze zu umgehen:

1) Wie Sie bereits erwähnt haben:Teilen Sie die Anweisung in Stapel von 1000 auf

2) Erstellen Sie eine abgeleitete Tabelle mit den Werten und verbinden Sie sie dann:

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

alternativ könnte man diese Werte auch verbinden - geht vielleicht sogar schneller:

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;

Dies erzeugt immer noch eine wirklich sehr große Aussage, hat aber nicht die Grenze von 1000 IDs. Ich bin mir jedoch nicht sicher, wie schnell Oracle dies analysieren wird.

3) Fügen Sie die Werte in eine (globale) temporäre Tabelle ein und verwenden Sie dann ein IN -Klausel (oder ein JOIN ). Dies wird wahrscheinlich die schnellste Lösung sein.