Rumah  >  Artikel  >  pangkalan data  >  Contoh untuk menyelesaikan masalah bahawa Oracle tidak boleh menggunakan lebih daripada 1000 dalam pernyataan

Contoh untuk menyelesaikan masalah bahawa Oracle tidak boleh menggunakan lebih daripada 1000 dalam pernyataan

WBOY
WBOYke hadapan
2022-06-13 18:11:142375semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang Oracle terutamanya tentang penggunaan kaedah dalam untuk menanyakan rekod Jika bilangan parameter selepas melebihi 1000, apakah yang akan berlaku, JDBC akan membuang ". java.sql.SQLException: ORA-01795: Bilangan maksimum ungkapan dalam senarai ialah 1000". Mari kita lihat bagaimana untuk menyelesaikannya. Saya harap ia akan membantu semua orang.

Contoh untuk menyelesaikan masalah bahawa Oracle tidak boleh menggunakan lebih daripada 1000 dalam pernyataan

Tutorial yang disyorkan: "Tutorial Video Oracle"

在oracle中,使用in方法查询记录的时候,如果in后面的参数个数超过1000个,那么会发生错误,JDBC会抛出“java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000”这个异常。

Penyelesaian saya ialah:

1 Cipta jadual sementara

Terdapat dua jenis jadual sementara ORACLE: jadual sementara peringkat sesi dan jadual sementara peringkat transaksi.

1. ON COMMIT DELETE ROWS

Ia adalah parameter lalai bagi jadual sementara, yang bermaksud bahawa data dalam jadual sementara hanya sah semasa proses transaksi (Transaksi). transaksi diserahkan (COMMIT), Segmen sementara jadual sementara akan dipotong secara automatik (TRUNCATE), tetapi struktur dan metadata jadual sementara masih disimpan dalam kamus data pengguna. Jika jadual sementara telah menyelesaikan misinya, sebaiknya padam jadual sementara, jika tidak pangkalan data akan mengekalkan banyak struktur jadual dan metadata jadual sementara.

2. ON COMMIT PRESERVE ROWS

Ini bermakna kandungan jadual sementara boleh wujud merentas transaksi Walau bagaimanapun, apabila sesi tamat, segmen sementara jadual sementara akan berakhir dengan akhir sesi dibuang, data dalam jadual sementara secara semula jadi akan dibuang. Tetapi struktur dan metadata jadual sementara juga disimpan dalam kamus data pengguna. Jika jadual sementara telah menyelesaikan misinya, sebaiknya padam jadual sementara, jika tidak pangkalan data akan mengekalkan banyak struktur jadual dan metadata jadual sementara.

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; --删除临时表

Selepas mencipta jadual sementara, anda boleh menggunakan subkueri dalam penyata dalam, supaya tidak lebih daripada 1,000 laporan ralat

select * from table_name where id in(select id from test_table);

2. Gunakan dalam() atau dalam()

Secara rasmi berkata: Senarai ungkapan yang dipisahkan koma boleh mengandungi tidak lebih daripada 1000 ungkapan Senarai set ungkapan yang dipisahkan koma boleh mengandungi sebarang bilangan set, tetapi setiap set boleh mengandungi tidak lebih daripada 1000 ungkapan

Di sini kita menggunakan oracle tuple (Senarai set ungkapan yang dipisahkan koma), iaitu tuple, sintaksnya adalah seperti berikut:

SELECT * FROM TABLE_NAME WHERE (1, COLUMN_NAME) IN 
((1, VALUE_1), 
(1, VALUE_2), 
...
...
...
...
(1, VALUE_1000),
(1, VALUE_1001));

Sebagai contoh, jika kita ingin menanyakan maklumat pengguna mengikut ID pengguna daripada jadual pengguna, kita boleh menulis:

select * from user u where (1, u.id) in ((1, 'id001'),(1,'id002'),(1,'id003'))

Pernyataan di atas sebenarnya bersamaan dengan:

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

Kebanyakan projek kami Jika anda tahu cara menggunakan rangka kerja ORM seperti MyBatis, kami boleh menggunakan foreach MyBatis pada asalnya seperti ini:

where u.id in
<foreach collection="userIds" item="item" separator="," open="(" close=")" index="">
	#{item}
</foreach>

dan kini ditukar kepada:

where (1, u.id) in
<foreach collection="userIds" item="item" separator="," open="(" close=")" index="">
	(1, #{item})
</foreach>

Tutorial yang disyorkan: "Tutorial Video Oracle

Atas ialah kandungan terperinci Contoh untuk menyelesaikan masalah bahawa Oracle tidak boleh menggunakan lebih daripada 1000 dalam pernyataan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam