oracle資料庫in 超過1000 的解決方案

2021-10-08 15:50:57 字數 802 閱讀 1577

專案中遇到sql語句的in超過1000這個問題,再次總結一下解決方案:

使用動態拼接sql語句in(...) or in(..),效能太差,再次不多說

使用表代替in中的字串,事務問題

由2引申出使用oracle的臨時表,使用臨時表,想怎麼查怎麼查。(該問題中,本人用的是事務臨時表)

在這詳細說一下,臨時表:

oracle的臨時表分為兩種:事務臨時表和會話臨時表。oracle的臨時表就是用來暫時儲存臨時資料(亦或叫中間資料)的乙個資料庫物件,它和普通表有些類似,然而又有很大區別。它只能儲存在臨時表空間,而非使用者的表空間。oracle臨時表是會話或事務級別的,只對當前會話或事務可見。每個會話只能檢視和修改自己的資料。

會話臨時表建立:create global temporary table temp1(id number) on commit preserve rows;

事務臨時表建立:create global temporary table temp1(id number) on commit delete rows;

注:網還有另外一種建立方式create global temporary table temp1 on commit preserve rows    as  select id from 另乙個表;

oracle的臨時表建立完就是真實存在的,無需每次都建立。

演算法思路就是:

獲取資料庫連線

關閉自動提交

想臨時表插入資料

查詢提交

關閉資料庫連線

哪位大佬如有發現錯誤,不吝賜教,謝謝。

Oracle資料庫中IN引數個數超過1000的問題

1.用表關聯代替in 2.在where條件中使用子查詢,如 select from b where c in select d from e 這樣的形式。順便在這裡擴充一下in和exists。在sql優化中,in與exists的區別就是,當括號裡面值少的話,用in效率會比較高,值多的話用exists...

oracle 10 資料庫覆蓋

同事經常發來乙個dmp檔案,要求覆蓋資料庫,我一般用下面的方法完成 首先刪除該使用者,再新建使用者,匯入資料到該使用者。1 drop user username cascade 2 新建使用者 付權 3 匯入資料 imp 今天導資料時遇到乙個很奇怪的問題,一直報 ora 01940 無法刪除當前已連...

Oracle 10g資料庫管理

oracle 10g資料庫管理 課程介紹 本課程面向企業 oracle 10g 資料庫管理的學員。通過 oracle 10g 資料庫管理課程的系統培訓,使學員能夠在較短的時間內掌握 oralcle10g 資料庫管理和維護的各種技術,從而掌握最新版 oracle 的新特性和 oracle 資料通用技術...