專案中遇到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 資料通用技術...