『壹』 oracle中如何把查詢結果導出到excel裡面
oracle導出excel
一、oracle導出excel
方法一:最簡單的方法---用工具plsql dev
執行File =>newReport Window 。在sql標簽中寫入需要的sql,點擊執行或按快捷鍵F8,會先吃出查詢結果。在右側工具欄,可以選擇按鈕另存為html、 as html、exportresults,其中export results按鈕中就可以導出excel文件、csv文件、tsv文件、xml文件。
方法二:最專業的方法---用原始工具sqlplus
原文參見:http://www.eygle.com/archives/2005/04/eoasqlplusieaae.html
我做了一點修改,如下所示:
1.main.sql
用以設置環境,調用具體功能腳本
2.功能腳本-get_tables.sql
為實現具體功能之腳本
通過這樣兩個腳本可以避免spool中的冗餘信息,參考:
如何去除SQLPLUS中SPOOL的冗餘信息
示例如下:
1.main.sql腳本:
[oracle@jumper utl_file]$ more main.sql
set linesize 200
set term off verify off feedback off pagesize 999
set markup html on entmap ON spool on preformat off
spool d:/tables.xls
@d:/get_tables.sql
spool off
exit
2.get_tables.sql腳本:
[oracle@jumper utl_file]$ more get_tables.sql
select owner,table_name,tablespace_name,blocks,last_analyzed
from all_tables order by 1,2;
3.執行並獲得輸出:
[oracle@jumper utl_file]$ sqlplus "/ as sysdba" @d:/main.sql
SQL*Plus: Release 9.2.0.4.0 - Proction on Mon Apr 25 10:30:11 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Proction
With the Partitioning option
JServer Release 9.2.0.4.0 - Proction
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.4.0 - Proction
With the Partitioning option
JServer Release 9.2.0.4.0 - Proction
[oracle@jumper utl_file]$ ls -l tables.xls
-rw-r--r-- 1 oracle dba 69539 Apr 25 10:30 tables.xls
[oracle@jumper utl_file]$
此處輸出為xls文件,通過下圖我們可以看到輸出效果:
把main.sql腳本中的,spooltables.xls更改為spool tables.htm,我們可以獲得htm格式輸出,效果如下圖:
方法三:最悲劇的方法,之所以稱為悲劇,是因為這個方法其實很簡單,但是你可能沒有注意。
打開plsql dev工具,執行file=>newsql window ,輸入sql,點擊工具欄「執行」按鈕或按快捷鍵F8。會顯示出結果集。
點擊結果集的左上方,可全部選中結果集,然後右鍵=>,直接粘貼到excel文件中就可以了!
方法四:最努力的方法,這種方法稍微有點麻煩,但不用寫腳本,也不用psql dev工具,只用sql plus就可以了。
在sqlplus中,執行想要的sql,把結果集到文本文件中(或者直接用spool命令直接輸入到文本文件中),把不必要的字元、空格替換成逗號",",然後另存為csv文件,最後在用excel另存為exl文件就可以了。
二、把excel文件數據導入到oracle的某個表中。
方法一:最省時的方法,需要藉助plsql dev工具。
a.復制整個工作簿中的數據到某個表中。
點擊excel工作區左上角,全部選中數據,ctrl+c 復制整個工作簿中的數據。在plsql dev中,編輯表格表的數據,點擊數據展示區左上角,直接粘貼就可以了(注意excel的第一列應該保持為空,如果不為空可以增加一空列,不然你復制的數據就會少一列的)!如下圖
所示:
b.復制某列的數據。
這個很容易,選中excel某一列的數據,復制,選中oracle某個表的某一列,直接粘貼就可以了。plsql dev和excel中的列可以相互復制。
方法二:最專業的方法,用sql loader。
原文地址:http://daniel-wuz.javaeye.com/blog/198112
1.錄入excel 測試表格,test.xls。
2.另存為.csv格式
3.創建sql*loader控制文件test.ctl,內容如下:
Load data
Infile 'c:/test.csv'
insert Into table test Fields terminated by','(column1,column2,column3,column4,column5)
需要將數據文件拷貝到對應位置
4.到資料庫中建立對應的測試表test
create table test (
column1 Varchar2(10),
column2 Varchar2(10),
column3 Varchar2(10),
column4 Varchar2(10),
column5 Varchar2(10)
)
5.執行導入命令
Sqlldr userid = system/manager control='C:/test.ctl'
導入成功!
附:
Sqlldr的函數關鍵字說明:
Userid --oracle用戶名 userid = username/password
Control --控制文件名稱 control =『e:/insert.ctl』
Log –-日誌文件名稱 log = 『e:/insert.log』
Bad --損壞文件名稱
Data --data file name
Discard --discard file name
Discardmax --number of discards to allow(默認全部)
Skip --導入時跳過的記錄行數(默認0)
Load --導入時導入的記錄行數(默認全部)
Errors --允許錯誤的記錄行數(默認50)
ctl文件內容說明:
Load data
Infile 『e:/test.csv』 --數據源文件名稱
Append|insert|replace --append在表後追加,insert插入空表,replace替代原有內容
Into table test --要導入的資料庫表名稱
[when id = id_memo] --過濾條件
Fields terminated by X』09』 --欄位分隔符
(id,name,telphone) --欄位名稱列表
方法三:最悲劇的方法,創建oracle外部表,為了把excel中的數據導入到數據中而去建立外部表,大題小做了!
將excel文件另存為csv文件a.csv,然後創建一個外部表t,數據指向a.csv。然後根據外部表創建一個普通的表:
create table a asselect * from t ,這樣就可以把最初的excel文件導入到oracle中的表了。
方法四:最古典的方法,拼接sql語句。如果你excel熟的話,這種方法也不錯。
在excel中,把數據拼接成如下sql語句:
insert into empvalues('1','2','3');
insert into empvalues('4','5','6');
insert into empvalues('7','8','9');
出以上sql,執行就可以了!!
『貳』 Oracle SQL從含數字的字元串中,截取出非數字字元
這個只能祭出強大的正則表達式了,字元的正a-z A-Z ,篩選的正則表達式為regexp_substr(欄位,'.*[a-zA-z]')
『叄』 oracle sql developer 和pl sql developer有什麼不同
A1.sqldeveloper 是oracle自己推出的開發工具,在JDK 6u18之前,linux系統下很不穩定,經常出現無響應的情況。之後的穩定性有了很大的改進。
A2.支持多平台(fedora、ubuntu等桌面級linux上唯一可用的圖形化開發工具);
A3.免費;
A4.除了可以連接oracle資料庫以外,sybase、mysql、mssqlserver、MS Access等資料庫也可以訪問查看數據;
A5.同一個界面可以登陸多個資料庫,方便在多個資料庫之間操作;
A6.支持自定義快捷鍵可以實現組合鍵清空界面、組合鍵復制代碼等快捷操作;
A7.比較佔用內存消耗資源較多,這是缺點也是優點,缺點是相對消耗資源,(但是對於筆記本、台式機CPU性能過剩、內存白菜價的今天,基本可以忽略不計),優點是由於佔用較多內存在執行幾十、幾百條sql的效率上很高,不像PL/SQL Dev還要有一個初始化的動作。例如執行上百條insert into xxx values(123,'aa');之類的語句,可以將這兩款軟體進行比對;
A8.個人感覺導出功能強於PL/SQL Dev 有不同意見的歡迎討論,例如導出一個用戶下的所有表結構、存儲過程、視圖、數據鏈接等等;
A9.對11g的一些新特性支持到位;
B1.PL/SQL Dev是老牌的開發工具,穩定性很高;
B2.不支持unix、linux等平台;
B3.不免費,但實際上這一點基本上可以忽略;
B4.新版本也開始支持其他資料庫的連接,但支持的種類還是不夠全;
B5.要同時訪問多個資料庫的話需要啟動多個軟體界面;
B6.不支持自定義快捷鍵,但是界面上的按鍵也足夠開發者使用了;
B7.資源佔用很少;
B8.HTML Manual功能可以將從oracle下載的官方文檔直接索引到自己的幫助當中,尤其適合不能上網的環境,即便能上網,在這個裡面搜索一些語法、錯誤號等效率也是很高的;
B9.report窗口支持直接從用sql當中選取表的欄位來做成圖表,例如餅、曲線、柱狀、雷達圖等,可以另存為PDF、圖片等。
B10.支持select * from xxx for update的修改方式,sqldeveloper貌似不支持(至少我還不會)
我能想到的大概也就是這些,因為我經常在Fedora系統下辦公,所以對sqldeveloper玩的比較多,基本上這兩款軟體我都會用,終上所述,個人認為兩款軟體可以同時存在於你的系統當中,同時使用可以事半功倍、相得益彰。
『肆』 mysql資料庫的SQL語句和oracle的有什麼區別詳細點
首先是大體一致的,只是分頁查詢時oracle用的偽列(rownum),mysql用的是limit,具體的可以網路一下分頁;
另外oracle對sql語句要求更為嚴格,而且oracle里變數較mysql更多點,oracle中有number型,有大數據類型,mysql沒得;
另外舉個例子,oracle不能插入為空列,而mysql是可以的(個人覺得,不知道正確與否)。還有他們兩者函數有不同之處,如轉日期函數oracle是to_date('要轉的字元串','格式') -- select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from al,而mysql是str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09//都是針對字元串轉日期來的。
還有一點,我們常常希望主鍵可以自動增長,避免我們插入數據時的重復問題,但是oracle不能設置列自動增長,而mysql是可以的,oracle可以用序列加觸發器來解決自動增長問題達到與mysql一樣的效果。
總體來說百分之九十的sql語句是沒區別的。總體來說oracle的格式嚴格點,對有些字元型的還必須加單引號才能插入,mysql要求就沒這么多了。還有當向資料庫插入一個日期時,mysql可以直接插入成功,但是oracle需要先轉化為sql裡面的日期類型才行;oracle較mysql而言更安全,但是收費的,一般大公司用的多。oracle還有存儲過程和函數,觸發器這些這是mysql沒有的。大體就是這樣吧。
『伍』 oracle SQL語句怎麼修改數據表的欄位允許為空
欄位允許為空的語句為:altertable表名altercolumn列名類型長度null。
資料庫SQL語言的修改語句,可以用來修改基本表,其一般表示格式為:
ALTER TABLE<表名>[改變方式]
改變方式:
1、 加一個欄位: ADD "欄位 1" "欄位 1 資料種類"
2、刪去一個欄位: DROP "欄位 1"
3、改變欄位名稱: CHANGE "原本欄位名" "新欄位名" "新欄位名資料種類"
4、改變欄位的資料種類: MODIFY "欄位 1" "新資料種類"
(5)oraclesqlreport擴展閱讀
如需在表中添加列,請使用下面的語法: ALTER TABLE table_name ADD column_name datatype
如需刪除表中的列,請使用下面的語法(請注意,某些資料庫系統不允許這種在資料庫表中刪除列的方式):ALTER TABLE table_name DROP COLUMN column_name
要改變表中列的數據類型,請使用下面的語法:
SQL Server / MS Access:ALTER TABLE table_name ALTER COLUMN column_name datatype
My SQL / Oracle:ALTER TABLE table_name MODIFY COLUMN column_name datatype
Oracle 10G 之後版本:ALTER TABLE table_name MODIFY column_name datatype;