Oracle 臨時表在實際開發中的應用

2021-05-27 13:57:04 字數 1551 閱讀 6331

sql server 在編寫查詢式的儲存過程的時候,一直都令我為之讚嘆。create procedure ps_procedure_name as select * from table; select查詢語句可以作為sql server儲存過程的一部分,直接返回結果集。但在oracle實現這種形式的儲存過程是不合語法的。

為了達到這種目的,我們需要使用oracle 的臨時表(這是其中一種解決方案)。

oracle資料庫除了可以儲存永久表外,還可以建立臨時表temporary tables。oracle臨時表分為 會話級臨時表(on commit preserve rows) 和 事務級臨時表 on commit delete rows)。會話級臨時表是指臨時表中的資料只在會話生命週期之中存在,當使用者退出會話結束的時候,oracle自動清除臨時表中資料。

事務級臨時表是指臨時表中的資料只在事務生命週期中存在。當乙個事務結束(commit or rollback),oracle自動清除臨時表中資料。

臨時表中的資料只對當前session有效,每個session都有自己的臨時資料,並且不能訪問其它session的臨時表中的資料。

//在資料庫建立乙個臨時表:

//on commit preserve rows         --這裡代表的是事務級臨時表

on commit preserve rows          --這裡代表的是會話級臨時表 

在實際的操作中,我就驗證過上面所說的。一開始我使用了事務級臨時表,將資料插入到臨時表時,使用了commit操作,結果臨時表的內容清空了。例如是:insert into esps_emp_rank_temp select * from table;commint;執行這兩段sql後,相當於沒有插入資料。

如果我們使用會話級臨時表,即使使用了commit,臨時表中的內容還是存在的。直到會話斷開時,臨時表中的內容才真正的清空。

所以,在實際的開發過程中,我們因該結合場景,使用不同型別的臨時表。

在建議提案系統開發的過程中,我使用了會話級的臨時表。將查詢的資料插入到臨時表中,並且讀取臨時表的內容,會話斷開時,臨時表中的內容自動清空。 

在c#裡面呼叫的三大步驟:

//c#裡面定義的乙個string型別的變數,儲存一段動態sql,儲存過程為:esps_emp_rank_statistis(,'')

public static string i_emp_rank_statistis = "begin esps_emp_rank_statistis(,''); end;";

//行儲存過程,把結果集插入到臨時表esps_emp_rank_temp

waf.com.core.oraclehelper. executenonquery(conn, commandtype.text, string.format(sqlcollector.i_emp_rank_statistis, 2,』2011』));

//讀取臨時表中儲存的結果集

oracle datareader dr = waf.com.core.oraclehelper. executereader(「select * from esps_emp_rank_temp」)

Oracle中臨時表

最近考慮到我們的資料庫端寫儲存過程關於臨時表使用的情況,由於我們 現在還不清楚資料庫端到底是怎麼處理的,是否和sql server的處理方式相 同,是否會存在隱患等等一些問題,為了避免將來不必要的麻煩我做了深 入的研究和檢視了一些權威的資料,現在和大家共享,希望大家在處理 oracle臨時表是注意一...

Oracle中臨時表

最近考慮到我們的資料庫端寫儲存過程關於臨時表使用的情況,由於我們 現在還不清楚資料庫端到底是怎麼處理的,是否和 sql server 的處理方式相 同,是否會存在隱患等等一些問題,為了避免將來不必要的麻煩我做了深 入的研究和檢視了一些權威的資料,現在和大家共享,希望大家在處理 oracle 臨時表是...

Git 在 實際開發 中的實際流程

master 通常只是用於對外發布專案的新版本 代替單一的 master,日常開發應該在另一條分支上完成,我們把開發用的分支叫做 develop 專案正式發布後難免會出現 bug,這時就需要建立乙個分支,進行 bug 的修補 hotfix 應該從 master 中分離出來,bug 被修補後,再合併到...