當前位置:首頁 » 存儲配置 » oracle存儲過程中創建臨時表

oracle存儲過程中創建臨時表

發布時間: 2024-12-20 15:17:30

㈠ oracle中,存儲過程建的臨時表

create table tmp_臨時表 as select * from 表名 ;// 這邊是創建臨時表再將數據添加到臨時表

insert into tmp_臨時表 select * from 表名 ; // 和上面的一樣,但是這個是臨時表已經存在新增數據

㈡ 在oracle 存儲過程中,動態創建臨時表後,執行一段很長的insert 語句,應該怎麼弄呢

通過拼接sql語句賦給變數如v_sql
然後再用execute immediate v_sql執行即可實現。

㈢ oracle使用存儲過程創建臨時表提示ORA-24344: success with compilation error

str:='INSERTINTOTEMP_ACTIVITY(
SELECT
TO_CHAR(A1."FEndTime",'YYYY')||'年'||TO_CHAR(A1."FEndTime",'MM')||'月'||TO_CHAR(A1."FEndTime",'DD')||'日'AS"ActivityDate",
A2."FName"AS"ActivityUser",
A1."FSFPlan"AS"ActivityPLan",
A3."FName"AS"ActivityCustomer",
A1."FDescription"AS"Activity",
A1."FAttainment"AS"Attainment",
A1."FDescriptios"AS"Descriptios"
FROM"TcActivity"A1
LEFTJOIN"TsUser"A2ONA2."FId"=A1."FUserId"
LEFTJOIN"YstCustomer"A3ONA3."FId"=A1."FCustomerId")';

把這個sql 輸出來看看,多了一個「(」。

㈣ oracle 在存儲過程中動態的建一個臨時表使用和在資料庫里寫死一個臨時表使用兩者有什麼區別

我們仍使用實驗 05中的環境,略去准備數據的過程。

我們仍然使用兩個會話,一個會話 run,用於運行主 SQL;另一個會話 ps,用於進行 performance_schema 的觀察:

主會話線程號為 29,

可以看到寫入的線程是 page_clean_thread,是一個刷臟操作,這樣就能理解數據為什麼是慢慢寫入的。

也可以看到每個 IO 操作的大小是 16K,也就是刷數據頁的操作。


結論:

我們可以看到,

1. MySQL 會基本遵守 max_heap_table_size 的設定,在內存不夠用時,直接將表轉到磁碟上存儲。

2. 由於引擎不同(內存中表引擎為 heap,磁碟中表引擎則跟隨 internal_tmp_disk_storage_engine 的配置),本次實驗寫磁碟的數據量和實驗 05中使用內存的數據量不同。

3. 如果臨時表要使用磁碟,表引擎配置為 InnoDB,那麼即使臨時表在一個時間很短的 SQL 中使用,且使用後即釋放,釋放後也會刷臟頁到磁碟中,消耗部分 IO。

㈤ Oracle存儲過程創建臨時表,插入數據後,怎麼返回臨時表數據,並在asp.net中接收到datatable中

建一個視圖好啦.把結果存起來:
CREATE VIEWVIEW_NAME AS
SELECT * FROM A
UNION ALL
SELELCT * FROM B
這樣就會把兩張的表內容同時存在視圖:VIEW_NAME中.並且還會時時更新.即方便又節省空間.

㈥ oracle 存儲過程 怎麼用內存表

一 臨時表語法

臨時表只在Oracle 8i 以及以上產品中支持。

語法:

<textarea cols="50"
rows="15" name="code" class="java:showcolumns">create global
temporary table 臨時表名 on commit preserve/delete rows
--preserve:SESSION級的臨時表,delete:TRANSACTION級的臨時表.</textarea>

SESSION級的臨時表數據在整個SESSION都存在,直到結束此次SESSION;而TRANSACTION級的臨時表數據在
TRANACTION結束後消失,即COMMIT/ROLLBACK或結束SESSION都會清除TRANACTION臨時表數據。

當會話退出或者用戶提交commit和回滾rollback事
務的時候,臨時表的數據自動清空,但是臨時表的結構以及元數據還存儲在用戶的數據字典中。當一個會話結束(用戶正常退出、用戶不正常退出、ORACLE實
例崩潰)或者一個事務結束的時候,Oracle對這個會話的表執行 TRUNCATE
語句清空臨時表數據,但不會清空其它會話臨時表中的數據。臨時表可以使用觸發器。

二 臨時表ORACLE資料庫與sqlserver的區別

ORACLE臨時表,transaction或者session結束,會清空表數據。但是表還存在。

SQL SERVER臨時表,存儲在 tempdb 中,當不再使用時會自動刪除。

1 SQL SERVER臨時表是一種」內存表」,表是存儲在內存中的。ORACLE臨時表除非執行DROP TABLE,否則表定義會保留在數據字典中;

2 SQL SERVER臨時表不存在類似ORACLE臨時表事務級別上的功能;

3 SQL SERVER本地臨時表(#) 與 ORACLE的會話級別臨時表類似,但是在會話退出的時候,SQL SERVER會自動刪除,ORACLE不會刪除表;

4 SQL SERVER的全局臨時表(##) 是指多個連接共享同一片內存。當沒有指針引用該內存區域時,SQL SERVER自動釋放全局臨時表。

ORACLE不是一種內存中的資料庫,所以如果ORACLE類似SQL SERVER 頻繁的對臨時表進行建立和刪除,必定會影響性能。所以ORACLE會保留臨時表的定義直到用戶DROP TABLE。

在ORACLE中,如果需要多個用戶共享一個表(類似
SQL
SERVER的全局臨時表##),則可以利用永久表,並且在表中添加一些可以唯一標識用戶的列。利用觸發器和視圖,當用戶退出的時候,根據該登陸用戶的唯
一信息刪除相應的表中的數據。 但這種方法給ORACLE帶來了一定量的負載。

三 使用

1 判斷表不存在就創建表

<textarea cols="50" rows="15" name="code" class="java:showcolumns:firstline[1]">create ...
is
temptable_name varchar2(20);
v_count number(1);
begin
temptable_name := 'TEMP_TABLENAME';
select count(*) into v_count from tab where tname = temptable_name;
if(v_count = 0) then
execute immediate 'create table ...';
else
--其他表存在的操作
end if;</textarea>

2 注意使用時,可能會產生的錯誤:ORA-08103: object no longer
exists,ORA-14452 attempt to create, alter or drop an index on temporary
table already in use

ORA-14452 : 通過1的判斷,一般會解決該問題。如果在表使用時,執行刪除表操作,會出現該錯誤。

ORA-08103 : 使用事務級的臨時表時,如果,事務提交前執行刪除表操作或者在事務提交以後使用,就會產生這樣的問題。改成會話級別的可以解決這個問題,但是在會話級別的數據的正確性,可能會因為使用連接池,同一個會話中不同操作而產生錯誤。

熱點內容
一鍵搭建sk5伺服器 發布:2025-05-11 01:40:09 瀏覽:510
鴻業acs加密鎖模擬器 發布:2025-05-11 01:38:49 瀏覽:934
神廟逃亡2安卓版怎麼玩 發布:2025-05-11 01:38:05 瀏覽:158
凱傑都什麼配置 發布:2025-05-11 01:38:04 瀏覽:468
php微信開源系統源碼 發布:2025-05-11 01:37:54 瀏覽:808
pythonfor多個參數 發布:2025-05-11 01:12:32 瀏覽:72
plcsfc編程 發布:2025-05-11 01:11:56 瀏覽:164
安卓手機能刪除什麼東西 發布:2025-05-11 01:03:55 瀏覽:413
怎麼更改fox存儲路徑 發布:2025-05-11 01:02:30 瀏覽:612
忘記賬戶密碼如何恢復出廠設置 發布:2025-05-11 00:51:15 瀏覽:391