Ⅰ sql如何把查詢出來的多個表創建成一個臨時表
SELECT * INTO #TEMPTABLENAME
FROM
(
SELECT xxxxxx //你的查詢語句
)AS table_source //這個別名是必須的
WHERE xxxxxxxx //你需要的where判斷;
COMMIT或ROLLBACK後可自動刪除該臨時表
1、sql server使用select into會自動生成臨時表,不需要事先創建。
select * into #temp from sysobjects
2、sql要把多個表合並成一個要用到union或union all的關鍵字。
3、union或union all的區別是:union會自動壓縮多個結果集合中的重復結果,而union all則將所有的結果全部顯示出來。
(1)oracle創建臨時表sql擴展閱讀
sql語言特點如下:
1、一體化:SQL集數據定義DDL、數據操縱DML和數據控制DCL於一體,可以完成資料庫中的全部工作。
2、使用方式靈活:它具有兩種使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到C、C++、FORTRAN、COBOL、JAVA等主語言中使用。
3、語言簡潔,語法簡單,好學好用:在ANSI標准中,只包含了94個英文單詞,核心功能只用6個動詞,語法接近英語口語。
Ⅱ Oracle臨時表創建的基本語句是什麼
Oracle創建臨時表的語法如下:
CREATE
GLOBAL
TEMPORARY
TABLE
table
"("
column
datatype
[DEFAULT
expr]
[{
NULL
|
NOT
NULL}]
[,
column
datatype
[DEFAULT
expr]
[
{NULL
|
NOT
NULL}
]...
")"
ON
COMMIT
{DELETE
|
PRESERVE
}
ROWS
;
在Oracle中,可以創建以下兩種臨時表:
1)
會話特有的臨時表
CREATE
GLOBAL
TEMPORARY
(
)
ON
COMMIT
PRESERVE
ROWS;
2)
事務特有的臨時表
CREATE
GLOBAL
TEMPORARY
(
)
ON
COMMIT
DELETE
ROWS;
CREATE
GLOBAL
TEMPORARY
TABLE
MyTempTable
Ⅲ ORACLE有沒有類似SQL SERVER中的臨時表
對比Oracle臨時表和SQL Server臨時表的不同點
1創建臨時表不需要往編目表中插入條目,臨時表的使用也不需要訪問編目表,因此也沒有對編目表的爭用。
2僅有創建臨時表的app才可存取臨時表,所以在處理臨時表時沒有鎖。
3如果指定NOT LOGGED選項,在處理臨時表時不記日誌。所以如果有僅在資料庫的一個會話中使用的大量臨時數據,把這些數據存入臨時表能大大提高性能。
Ⅳ oracle中創建臨時表和創建普通表的區別
臨時表是只有創建的用戶才可以使用的,用戶退出或事務結束時(具體看on commit 選項)自動刪除該表,也可以手動drop。create global temporary table ...,具體的創建語法還有很多選項,你可以參考ORACLE SQL References.對普通表的DML,建觸發器等操作同樣適合臨時表,與普通表不同的是,臨時表使用的是PGA,如果PGA空間不夠了才會使用臨時表空間。
Ⅳ sql中怎樣將查詢出來的結果創建成臨時表
其實視圖最典型的用途就是這樣了,做起來也比較容易,不過樓主要求臨時表,那麼就試試吧,一般來說數據量大的用錶快,不然就建視圖,不知道樓主是用什麼資料庫的呢? 如果是ms sql server的話可以:
SELECT * INTO #TEMPTABLENAME
FROM
(
SELECT xxxxxx //你的查詢語句
)AS table_source //這個別名是必須的
WHERE xxxxxxxx //你需要的where判斷
;
COMMIT或ROLLBACK後可自動刪除該臨時表
可以參考
等網址
Ⅵ 在oracle可以創建臨時表嗎
oracle可以創建臨時表,ORACLE臨時表有兩種類型:會話級的臨時表和事務級的臨時表。
1)ON COMMIT DELETE ROWS
它是臨時表的默認參數,表示臨時表中的數據僅在事物過程(Transaction)中有效,當事物提交(COMMIT)後,臨時表的暫時段將被自動截斷(TRUNCATE),但是臨時表的結構 以及元數據還存儲在用戶的數據字典中。如果臨時表完成它的使命後,最好刪除臨時表,否則資料庫會殘留很多臨時表的表結構和元數據。
2)ON COMMIT PRESERVE ROWS
它表示臨時表的內容可以跨事物而存在,不過,當該會話結束時,臨時表的暫時段將隨著會話的結束而被丟棄,臨時表中的數據自然也就隨之丟棄。但是臨時表的結構以及元數據還存儲在用戶的數據字典中。如果臨時表完成它的使命後,最好刪除臨時表,否則資料庫會殘留很多臨時表的表結構和元數據。
1:會話級的臨時表的數據和你當前會話有關系,當前SESSION不退出的情況下,臨時表中的數據就還存在,臨時表的數據只有當你退出當前SESSION的時候才被截斷(TRUNCATE TABLE),如下所示:
會話級別的臨時表創建:
CREATE GLOBAL TEMPORARY TABLE TMP_TEST
(
ID NUMBER ,
NAME VARCHAR2(32)
) ON COMMIT PRESERVE ROWS;
或
CREATE GLOBAL TEMPORARY TABLE TMP_TEST ON COMMIT PRESERVE ROWS
AS
SELECT * FROM TEST;
操作示例:
SQL> CREATE GLOBAL TEMPORARY TABLE TMP_TEST
(
ID NUMBER ,
NAME VARCHAR2(32)
) ON COMMIT PRESERVE ROWS;
Table created
SQL> INSERT INTO TMP_TEST
SELECT 1, 'kerry' FROM DUAL;
1 row inserted
SQL> COMMIT;
Commit complete
SQL> SELECT * FROM TMP_TEST;
ID NAME
---------- ----------------
1 kerry
SQL> INSERT INTO TMP_TEST
SELECT 2, 'rouce' FROM DUAL;
1 row inserted
SQL> ROLLBACK;
Rollback complete
SQL> SELECT * FROM TMP_TEST;
ID NAME
---------- ----------------------
1 kerry
SQL>
2:事務級的臨時表(默認),這種類型的臨時表與事務有關,當進行事務提交或者事務回滾的時候,臨時表的數據將自行截斷,即當COMMIT或ROLLBACK時,數據就會被TRUNCATE掉,其它的特性和會話級的臨時表一致。
事務級臨時表的創建方法:
CREATE GLOBAL TEMPORARY TABLE TMP_TEST
(
ID NUMBER ,
NAME VARCHAR2(32)
) ON COMMIT DELETE ROWS;
或
CREATE GLOBAL TEMPORARY TABLE TMP_TEST ON COMMIT DELETE AS SELECT * FROM TEST;
SQL> CREATE GLOBAL TEMPORARY TABLE TMP_TEST
(
ID NUMBER ,
NAME VARCHAR2(32)
) ON COMMIT DELETE ROWS;
Table created
SQL> INSERT INTO TMP_TEST
SELECT 1, 'kerry' FROM DUAL;
1 row inserted
SQL> SELECT * FROM TMP_TEST;
ID NAME
---------- ----------------------
1 kerry
SQL> COMMIT;
Commit complete
SQL> SELECT * FROM TMP_TEST;
ID NAME
---------- ------------------------
SQL>
Ⅶ oracle資料庫建立臨時表,sql語句
create table 臨時表名 as
select *
from 原始表
where 月份 = 需要的月份
Ⅷ SQL怎麼創建一個臨時表
創建臨時表
方法一:
create table #臨時表名(欄位1 約束條件,
欄位2 約束條件,
.....)
create table ##臨時表名(欄位1 約束條件,
欄位2 約束條件,
.....)
方法二:
select * into #臨時表名 from 你的表;
select * into ##臨時表名 from 你的表;
註:以上的#代表局部臨時表,##代表全局臨時表
查詢臨時表
select * from #臨時表名;
select * from ##臨時表名;
刪除臨時表
drop table #臨時表名;
drop table ##臨時表名;
Ⅸ oracle存儲中創建並查詢臨時表
Oracle中的臨時表用法匯總
說明:下文中的一些說明和示例代碼摘自CSDN,恕不一一指明出處,在此一並對相關作者表示感謝! 如果作者有異議,請來信說明
1 語法 在Oracle中,可以創建以下兩種臨時表:
1) 會話特有的臨時表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> )
ON COMMIT PRESERVE ROWS;
2) 事務特有的臨時表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> )
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
所建的臨時表雖然是存在的,但是如果insert 一條記錄然後用別的連接登上去select,記錄是空的。
--ON COMMIT DELETE ROWS 說明臨時表是事務指定,每次提交後ORACLE將截斷表(刪除全部行)
--ON COMMIT PRESERVE ROWS 說明臨時表是會話指定,當中斷會話時ORACLE將截斷表。
2 動態創建
create or replace procere pro_temp(v_col1 varchar2,v_col2 varchar2) as
v_num number;
begin
select count(*) into v_num from user_tables where table_name='T_TEMP';
--create temporary table
if v_num<1 then
execute immediate 'CREATE GLOBAL TEMPORARY TABLE T_TEMP (
COL1 VARCHAR2(10),
COL2 VARCHAR2(10)
) ON COMMIT delete ROWS';
end if;
--insert data
execute immediate 'insert into t_temp values('''||v_col1||''','''||v_col2||''')';
execute immediate 'select col1 from t_temp' into v_num;
dbms_output.put_line(v_num);
execute immediate 'delete from t_temp';
commit;
execute immediate 'drop table t_temp';
end pro_temp;
測試:
15:23:54 SQL> set serveroutput on
15:24:01 SQL> exec pro_temp('11','22');
11
PL/SQL 過程已成功完成。
已用時間: 00: 00: 00.79
15:24:08 SQL> desc t_temp;
ERROR:
ORA-04043: 對象 t_temp 不存在
3 特性和性能(與普通表和視圖的比較) 臨時表只在當前連接內有效臨時表不建立索引,
所以如果數據量比較大或進行多次查詢時,不推薦使用數據處理比較復雜的時候時錶快,
反之視圖快點在僅僅查詢數據的時候建議用游標: open cursor for 'sql clause';
臨時表的創建
創建Oracle臨時表,可以有兩種類型的臨時表:會話級的臨時表和事務級的臨時表。
1)會話級的臨時表因為這這個臨時表中的數據和你的當前會話有關系,當你當前SESSION不退出的情況下,臨時表中的數據就還存在,而當你退出當前SESSION的時候,臨時表中的數據就全部沒有了,當然這個時候你如果以另外一個SESSION登陸的時候是看不到另外一個SESSION中插入到臨時表中的數據的。即兩個不同的SESSION所插入的數據是互不相乾的。當某一個SESSION退出之後臨時表中的數據就被截斷(truncate table,即數據清空)了。會話級的臨時表創建方法:Create Global Temporary Table Table_Name(Col1 Type1,Col2 Type2...) On Commit Preserve Rows;舉例create global temporary table Student(Stu_id Number(5),Class_id Number(5),Stu_Name Varchar2(8),Stu_Memo varchar2(200)) on Commit Preserve Rows ;
2)事務級臨時表是指該臨時表與事務相關,當進行事務提交或者事務回滾的時候,臨時表中的數據將自行被截斷,其他的內容和會話級的臨時表的一致(包括退出SESSION的時候,事務級的臨時表也會被自動截斷)。事務級臨時表的創建方法:Create Global Temporary Table Table_Name(Col1 Type1,Col2 Type2...) On Commit Delete Rows;舉例:create global temporary table Classes(Class_id Number(5),Class_Name Varchar2(8),Class_Memo varchar2(200)) on Commit delete Rows ;
3)、兩種不通類型的臨時表的區別:語法上,會話級臨時表採用on commit preserve rows而事務級則採用on commit delete rows;用法上,會話級別只有當會話結束臨時表中的數據才會被截斷,而且事務級臨時表則不管是commit、rollback或者是會話結束,臨時表中的數據都將被截斷。
例子:
1)、會話級(Session關閉掉之後數據就沒有了,當Commit的時候則數據還在,當Rollback的時候則數據也是一樣被回滾):
insert into student(stu_id,class_id,stu_name,stu_memo) values(1,1,'張三','福建');
insert into student(stu_id,class_id,stu_name,stu_memo) values(2,1,'劉德華','福州');
insert into student(stu_id,class_id,stu_name,stu_memo) values(3,2,'S.H.E','廈門');
SQL> select *from student ;
STU_ID CLASS_ID STU_NAME STU_MEMO
------ -------- -------- --------------------------------------------------------------------------------
1 1 張三 福建
2 1 劉德華 福州
3 2 S.H.E 廈門
4 2 張惠妹 廈門
SQL> commit;
Commit complete
SQL> select * from student ;
STU_ID CLASS_ID STU_NAME STU_MEMO
------ -------- -------- --------------------------------------------------------------------------------
1 1 張三 福建
2 1 劉德華 福州
3 2 S.H.E 廈門
4 2 張惠妹 廈門
SQL>insert into student(stu_id,class_id,stu_name,stu_memo) values(4,2,'張惠妹','廈門');
1 row inserted
SQL> select * from student ;
STU_ID CLASS_ID STU_NAME STU_MEMO
------ -------- -------- --------------------------------------------------------------------------------
1 1 張三 福建
2 1 劉德華 福州
3 2 S.H.E 廈門
4 2 張惠妹 廈門
4 2 張惠妹 廈門
SQL> rollback ;
Rollback complete
SQL> select * from student ;
STU_ID CLASS_ID STU_NAME STU_MEMO
------ -------- -------- --------------------------------------------------------------------------------
1 1 張三 福建
2 1 劉德華 福州
3 2 S.H.E 廈門
4 2 張惠妹 廈門
SQL>
2)、事務級(Commit之後就刪除數據):本例子將採用以下的數據:
insert into classes(Class_id,Class_Name,Class_Memo) values(1,'計算機','9608');
insert into classes(Class_id,Class_Name,Class_Memo) values(2,'經濟信息','9602');
insert into classes(Class_id,Class_Name,Class_Memo) values(3,'經濟信息','9603');
在一個SESSION中(比如SQLPLUS登陸)插入上面3條記錄,然後再以另外一個SESSION(用SQLPLUS再登陸一次)登陸,當你select * from classes;的時候,classes表是空的,而你再第一次登陸的SQLPLUS中select的時候可以查詢到,這個時候你沒有進行commit或者rollback之前你可以對剛才插入的3條記錄進行update、delete等操作,當你進行commit或者rollback的時候,這個時候由於你的表是事務級的臨時表,那麼在插入數據的session也看不到數據了,這個時候數據就已經被截斷了。
運行結果如下:
SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(1,'計算機','9608');
1 row inserted
SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(2,'經濟信息','9602');
1 row inserted
SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(3,'經濟信息','9603');
1 row inserted
SQL> update classes set class_memo ='' where class_id=3 ;
1 row updated
SQL> select * from classes ;
CLASS_ID CLASS_NAME CLASS_MEMO
-------- ---------- --------------------------------------------------------------------------------
1 計算機 9608
2 經濟信息 9602
3 經濟信息
SQL> delete from classes where class_id=3 ;
1 row deleted
SQL> select * from classes ;
CLASS_ID CLASS_NAME CLASS_MEMO
-------- ---------- --------------------------------------------------------------------------------
1 計算機 9608
2 經濟信息 9602
SQL> commit;
Commit complete
SQL> select *from classes ;
CLASS_ID CLASS_NAME CLASS_MEMO
-------- ---------- --------------------------------------------------------------------------------
SQL>
再重復插入一次,然後rollback。
SQL> Rollback ;
Rollback complete
SQL> select * from classes ;
CLASS_ID CLASS_NAME CLASS_MEMO
-------- ---------- --------------------------------------------------------------------------------
SQL>
臨時表的應用
1)、當某一個SQL語句關聯的表在2張及以上,並且和一些小表關聯。可以採用將大表進行分拆並且得到比較小的結果集合存放在臨時表中。
2)、程序執行過程中可能需要存放一些臨時的數據,這些數據在整個程序的會話過程中都需要用的等等。
5、注意事項:
1)、臨時表的索引以及對表的修改、刪除等和正常的表是一致的。
2)、Oracle的臨時表是Oracle8i才支持的功能特性,如果你的Oracle版本比較低的話,那麼就可能沒有辦法用到了,如果你的Oracle版本是8i的話,你還需要把$ORACLE_HOME/admin/${ORACLE_SID}/pfile目錄下的init<ORACLE_SID>.ora初始參數配置文件的compatible修改為compatible = "8.1.0",我的伺服器上就是這樣子配置的。當然也可以修改為compatible = "8.1.6"
Ⅹ 如何在oracle中用SQL創建臨時表
begin
execute immediate 'create global temporary table t as select 1 as id from al' ;
end ;
/