国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

終于以一種奇怪的方式搞定了Oracle的臨時表問題

2024-08-29 13:29:53
字體:
來源:轉載
供稿:網友


程序中常常需要在一個主鍵范圍內進行子查詢,而這個范圍是在前臺中動態生成的,所以傳過來的只能是一個字符串格式的確定這個主鍵范圍的sql語句.以前的做法是在sp中再根據這個sql語句拼出來返回最終結果的更大的語句.發現這樣子的語句往往效率很低,而且數據庫的改動(例如列名)也往往無法在包編譯時被檢查出來.

解決的思路是先把這個主鍵范圍的值查詢出來,再用這個查詢的結果和其他的表作鏈接,這樣最終的sql就不再是字符串格式了.因為主鍵范圍相對比較小,效率也會提高很多.

于是求助于oracle的臨時表,這看起來是存放主鍵查詢結果的理想的地方. 首先想到的是事務型的,但是發現在前臺的.net程序執行了存儲過程之后,默認執行了commit操作,所以返回的結果都是"對象已經不存在".還沒有搞懂游標的返回機制,但這看起來有些釜底抽薪的意思.

因此轉而投奔會話型的,查詢的結果在事務完成后仍會予以保留,只要連接沒有斷調 -- 這在我們這個c/s架構的程序中是可以滿足的. 一個新的問題又出來的,就是如何保證兩次執行不會發生影響. 現在的做法是簡單的在每次執行前truncate掉臨時表,這樣,每一次執行時候,存儲過程所看到的都是一張空表. 至此,大部分的問題便以這種頗為怪異的方式解決了.

但是問題仍然是有的.就是并發的問題.因為是c/s架構,當前每一個連接是局限在一個客戶端內,而在同一個客戶端產生這類并發的機會相對較小(不是沒有).剛剛想到一個可能的思路是每一次查詢完畢后,先去到數據,然后立即關閉連接,這樣臨時表中的數據就會被自動截斷.明天去試一試.

一段小插曲,一個哥們在網上搜oracle臨時表相關的材料,發給我一段類似下面的代碼:

declare @table1 table (cust_id int not null)
insert into @table1 select cust_id from customer

總覺得看著眼熟,但是在oracle中怎么編譯都不通過.一直到我把目光盯住了那個@ ..... 我終于明白了,這個是sqlserver中的代碼,ft啊,半年不用就退化到這個地步了


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 霍山县| 浠水县| 准格尔旗| 兴仁县| 阿拉善左旗| 永和县| 陕西省| 韶山市| 和龙市| 漳浦县| 孟村| 无极县| 佛教| 卢湾区| 扎兰屯市| 镇宁| 紫金县| 梅河口市| 萝北县| 庆安县| 波密县| 玉环县| 天全县| 繁峙县| 甘谷县| 法库县| 大丰市| 通辽市| 乌兰察布市| 兰溪市| 太湖县| 江都市| 拜城县| 永昌县| 依兰县| 固始县| 贵定县| 湄潭县| 广西| 新闻| 米泉市|