Dieser Artikel vermittelt Ihnen relevantes Wissen über Oracle und stellt vor allem die Verwendung der in-Methode zum Abfragen von Datensätzen vor. Wenn die Anzahl der Parameter nach in 1000 überschreitet, tritt ein Fehler auf und JDBC löst „java.sql.SQLException“ aus. ORA-01795: Ausnahme: Die maximale Anzahl von Ausdrücken in der Liste beträgt 1000. Werfen wir einen Blick darauf, wie wir das Problem lösen können. Ich hoffe, es wird für alle hilfreich sein.
Empfohlenes Tutorial: „Oracle Video Tutorial“
在oracle中,使用in方法查询记录的时候,如果in后面的参数个数超过1000个,那么会发生错误,JDBC会抛出“java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000”这个异常。
Meine Lösung ist:
Es gibt zwei Arten von temporären ORACLE-Tabellen: temporäre Tabellen auf Sitzungsebene Tabellen und temporäre Tabellen auf Transaktionsebene.
Es ist der Standardparameter der temporären Tabelle, was bedeutet, dass die Daten in der temporären Tabelle nur während des Transaktionsprozesses (COMMIT) gültig sind Das temporäre Segment der temporären Tabelle wird automatisch gelöscht (TRUNCATE), die Struktur und Metadaten der temporären Tabelle werden jedoch weiterhin im Datenwörterbuch des Benutzers gespeichert. Wenn die temporäre Tabelle ihre Aufgabe erfüllt hat, ist es am besten, die temporäre Tabelle zu löschen, da die Datenbank sonst viele Tabellenstrukturen und Metadaten der temporären Tabelle behält.
Das bedeutet, dass der Inhalt der temporären Tabelle transaktionsübergreifend vorhanden sein kann. Wenn die Sitzung jedoch endet, wird das temporäre Segment der temporären Tabelle mit dem Ende der Sitzung verworfen Daten in der temporären Tabelle wurden natürlich verworfen. Aber auch die Struktur und Metadaten der temporären Tabelle werden im Datenwörterbuch des Benutzers gespeichert. Wenn die temporäre Tabelle ihre Aufgabe erfüllt hat, ist es am besten, die temporäre Tabelle zu löschen, da die Datenbank sonst viele Tabellenstrukturen und Metadaten der temporären Tabelle behält.
create global temporary table test_table (id varchar2(50), name varchar2(10)) on commit preserve rows; --创建临时表(当前会话生效) --添加数据 insert into test_table VALUES('ID001', 'xgg'); insert into test_table VALUES('ID002', 'xgg2'); select * from test_table; --查询数据 TRUNCATE TABLE test_table; --清空临时表数据 DROP TABLE test_table; --删除临时表
Nach dem Erstellen der temporären Tabelle können Sie Unterabfragen in der in-Anweisung verwenden, sodass es nicht mehr als 1.000 Fehlerberichte gibt
select * from table_name where id in(select id from test_table);
Offiziell gesagt: Ein Komma - Eine durch Trennzeichen getrennte Liste von Ausdrücken kann nicht mehr als 1000 Ausdrücke enthalten, also Tupel. Die Syntax lautet wie folgt:
SELECT * FROM TABLE_NAME WHERE (1, COLUMN_NAME) IN ((1, VALUE_1), (1, VALUE_2), ... ... ... ... (1, VALUE_1000), (1, VALUE_1001));
Zum Beispiel, wenn wir Benutzerinformationen nach Benutzer-ID abfragen möchten In der Benutzertabelle können wir schreiben: select * from user u where (1, u.id) in ((1, 'id001'),(1,'id002'),(1,'id003'))
Die obige Aussage entspricht tatsächlich:
select * from user u where (1=1 and u.id='id001') or (1=1 and u.id='id002') or (1=1 and u.id='id003')
Die meisten unserer Projekte verwenden ORM-Frameworks wie MyBatis. Wir können MyBatis' foreach verwenden. Es wurde ursprünglich so geschrieben:
where u.id in <foreach collection="userIds" item="item" separator="," open="(" close=")" index=""> #{item} </foreach>
Jetzt wird es geändert in:
where (1, u.id) in <foreach collection="userIds" item="item" separator="," open="(" close=")" index=""> (1, #{item}) </foreach>
Empfohlenes Tutorial: „
Oracle Video Tutorial“
Das obige ist der detaillierte Inhalt vonBeispiel zur Lösung des Problems, dass Oracle in Anweisungen nicht mehr als 1000 verwenden kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!