Rumah > pangkalan data > Oracle > teks badan

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

WBOY
Lepaskan: 2022-06-13 18:11:14
ke hadapan
2361 orang telah melayarinya

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; --删除临时表
Salin selepas log masuk

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);
Salin selepas log masuk

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));
Salin selepas log masuk

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'))
Salin selepas log masuk

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')
Salin selepas log masuk

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>
Salin selepas log masuk

dan kini ditukar kepada:

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

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!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!