40+ 個非常有用的 Oracle 查詢語句慎皱,主要涵蓋了日期操作,獲取服務(wù)器信息叶骨,獲取執(zhí)行狀態(tài)宝冕,計算數(shù)據(jù)庫大小等等方面的查詢。這些是所有 Oracle 開發(fā)者都必備的技能邓萨,所以快快收藏吧!
日期/時間 相關(guān)查詢
獲取當(dāng)前月份的第一天
運(yùn)行這個命令能快速返回當(dāng)前月份的第一天菊卷。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期缔恳。
SELECTTRUNC(SYSDATE,'MONTH')"Firstdayofcurrentmonth"
獲取當(dāng)前月份的最后一天
這個查詢語句類似于上面那個語句,而且充分照顧到了閏年洁闰,所以當(dāng)二月份有 29 號歉甚,那么就會返回 29/2 。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期扑眉。
SELECTTRUNC(LAST_DAY(SYSDATE))"Lastdayofcurrentmonth"
獲取當(dāng)前年份的第一天
每年的第一天都是1 月1日纸泄,這個查詢語句可以使用在存儲過程中赖钞,需要對當(dāng)前年份第一天做一些計算的時候。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期聘裁。
SELECTTRUNC(SYSDATE,'YEAR')"YearFirstDay"FROMDUAL;
獲取當(dāng)前年份的最后一天
類似于上面的查詢語句雪营。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期。
SELECTADD_MONTHS(TRUNC(SYSDATE,'YEAR'),12)-1"YearLastDay"FROMDUAL
獲取當(dāng)前月份的天數(shù)
這個語句非常有用衡便,可以計算出當(dāng)前月份的天數(shù)献起。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期。
SELECTCAST(TO_CHAR(LAST_DAY(SYSDATE),'dd')ASINT)number_of_days
獲取當(dāng)前月份剩下的天數(shù)
下面的語句用來計算當(dāng)前月份剩下的天數(shù)镣陕。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期谴餐。
SELECTSYSDATE,
獲取兩個日期之間的天數(shù)
使用這個語句來獲取兩個不同日期自檢的天數(shù)。
SELECTROUND((MONTHS_BETWEEN('01-Feb-2014','01-Mar-2012')*30),0)
如果你需要查詢一些特定日期的天數(shù)呆抑,可以使用第二個查詢語句岂嗓。這個例子是計算員工入職的天數(shù)。
顯示當(dāng)前年份截止到上個月每個月份開始和結(jié)束的日期
這個是個很聰明的查詢語句鹊碍,用來顯示當(dāng)前年份每個月的開始和結(jié)束的日期厌殉,你可以使用這個進(jìn)行一些類型的計算。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期妹萨。
SELECTADD_MONTHS(TRUNC(SYSDATE,'MONTH'),i)start_date,
獲取直到目前為止今天過去的秒數(shù)(從 00:00 開始算)
SELECT(SYSDATE-TRUNC(SYSDATE))*24*60*60num_of_sec_since_morning
獲取今天剩下的秒數(shù)(直到 23:59:59 結(jié)束)
SELECT(TRUNC(SYSDATE+1)-SYSDATE)*24*60*60num_of_sec_left
數(shù)據(jù)字典查詢檢查在當(dāng)前數(shù)據(jù)庫模式下是否存在指定的表
這是一個簡單的查詢語句年枕,用來檢查當(dāng)前數(shù)據(jù)庫是否有你想要創(chuàng)建的表,允許你重新運(yùn)行創(chuàng)建表腳本乎完,這個也可以檢查當(dāng)前用戶是否已經(jīng)創(chuàng)建了指定的表(根據(jù)這個查詢語句在什么環(huán)境下運(yùn)行來查詢)熏兄。
SELECTtable_name
檢查在當(dāng)前表中是否存在指定的列
這是個簡單的查詢語句來檢查表里是否有指定的列,在你嘗試使用 ALTER TABLE 來添加新的列新到表中的時候非常有用树姨,它會提示你是否已經(jīng)存在這個列摩桶。
SELECTcolumn_nameASFOUND
顯示表結(jié)構(gòu)
這 個查詢語句會顯示任何表的 DDL 狀態(tài)信息。請注意我們已經(jīng)將‘TABLE’作為第一個信息提交了帽揪。這個查詢語句也可以用來獲取任何數(shù)據(jù)庫對象的 DDL 狀態(tài)信息硝清。舉例說明,只需要把第一個參數(shù)替換成‘VIEW’转晰,第二個修改成視圖的名字芦拿,就可以查詢視圖的 DDL 信息了。
SELECTDBMS_METADATA.get_ddl('TABLE','TABLE_NAME','USER_NAME')FROMDUAL;
獲取當(dāng)前模式
這是另一個可以獲得當(dāng)前模式的名字的查詢語句查邢。
SELECTSYS_CONTEXT('userenv','current_schema')FROMDUAL;
修改當(dāng)前模式
這是另一個可以修改當(dāng)前模式的查詢語句蔗崎,當(dāng)你希望你的腳本可以在指定的用戶下運(yùn)行的時候非常有用,而且這是非常安全的一個方式扰藕。
ALTERSESSIONSETCURRENT_SCHEMA=new_schema;
數(shù)據(jù)庫管理查詢數(shù)據(jù)庫版本信息
返回 Oracle 數(shù)據(jù)庫版本
SELECT*FROMv$version;
數(shù)據(jù)庫默認(rèn)信息
返回一些系統(tǒng)默認(rèn)的信息
SELECTusername,
數(shù)據(jù)庫字符設(shè)置信息
顯示數(shù)據(jù)庫的字符設(shè)置信息
SELECT*FROMnls_database_parameters;
獲取 Oracle 版本
SELECTVALUE
存儲區(qū)分大小寫的數(shù)據(jù)缓苛,但是索引不區(qū)分大小寫
某些時候你可能想在數(shù)據(jù)庫中查詢一些獨立的數(shù)據(jù),可能會用 UPPER(..) = UPPER(..) 來進(jìn)行不區(qū)分大小寫的查詢邓深,所以就想讓索引不區(qū)分大小寫未桥,不占用那么多的空間笔刹,這個語句恰好能解決你的需求 。
CREATETABLEtab(col1VARCHAR2(10));
調(diào)整沒有添加數(shù)據(jù)文件的表空間
另一個 DDL 查詢來調(diào)整表空間大小
ALTERDATABASEDATAFILE'/work/oradata/STARTST/STAR02D.dbf'resize2000M;
檢查表空間的自動擴(kuò)展開關(guān)
在給定的表空間中查詢是否打開了自動擴(kuò)展開關(guān)
SELECTSUBSTR(file_name,1,50),AUTOEXTENSIBLEFROMdba_data_files;
在表空間添加數(shù)據(jù)文件
在表空間中添加數(shù)據(jù)文件
ALTERTABLESPACEdata01ADDDATAFILE'/work/oradata/STARTST/data01.dbf'
增加數(shù)據(jù)文件的大小
給指定的表空間增加大小
ALTERDATABASEDATAFILE'/u01/app/Test_data_01.dbf'RESIZE2G;
查詢數(shù)據(jù)庫的實際大小
給出以 GB 為單位的數(shù)據(jù)庫的實際大小
SELECTSUM(bytes)/1024/1024/1024ASGBFROMdba_data_files;
查詢數(shù)據(jù)庫中數(shù)據(jù)占用的大小或者是數(shù)據(jù)庫使用細(xì)節(jié)
給出在數(shù)據(jù)庫中數(shù)據(jù)占據(jù)的空間大小
SELECTSUM(bytes)/1024/1024/1024ASGBFROMdba_segments;
查詢模式或者用戶的大小
以 MB 為單位給出用戶的空間大小
SELECTSUM(bytes/1024/1024)"size"
查詢數(shù)據(jù)庫中每個用戶最后使用的 SQL 查詢
此查詢語句會顯示當(dāng)前數(shù)據(jù)庫中每個用戶最后使用的 SQL 語句冬耿。
SELECTS.USERNAME||'('||s.sid||')-'||s.osuserUNAME,
性能相關(guān)查詢查詢用戶 CPU 的使用率
這個語句是用來顯示每個用戶的 CPU 使用率舌菜,有助于用戶理解數(shù)據(jù)庫負(fù)載情況
SELECTss.username,se.SID,VALUE/100cpu_usage_seconds
查詢數(shù)據(jù)庫長查詢進(jìn)展情況
顯示運(yùn)行中的長查詢的進(jìn)展情況
SELECTa.sid,
獲取當(dāng)前會話 ID,進(jìn)程 ID淆党,客戶端 ID 等
這個專門提供給想使用進(jìn)程 ID 和 會話 ID 做些 voodoo magic 的用戶酷师。
SELECTb.sid,
V$SESSION.SID AND V$SESSION.SERIAL# 是數(shù)據(jù)庫進(jìn)程 ID
V$PROCESS.SPID 是數(shù)據(jù)庫服務(wù)器后臺進(jìn)程 ID
V$SESSION.PROCESS 是客戶端 PROCESS ID, ON windows it IS : separated THE FIRST # IS THE PROCESS ID ON THE client AND 2nd one IS THE THREAD id.
查詢特定的模式或者表中執(zhí)行的最后一個 SQL 語句
SELECTCREATED,TIMESTAMP,last_ddl_time
查詢每個執(zhí)行讀取的前十個 SQL
SELECT*
在視圖中查詢并顯示實際的 Oracle 連接
SELECTosuser,
查詢并顯示通過打開連接程序打開連接的組
SELECTprogramapplication,COUNT(program)Numero_Sesiones
查詢并顯示連接 Oracle 的用戶和用戶的會話數(shù)量
SELECTusernameUsuario_Oracle,COUNT(username)Numero_Sesiones
獲取擁有者的對象數(shù)量
SELECTowner,COUNT(owner)number_of_objects
實用/數(shù)學(xué) 相關(guān)的查詢把數(shù)值轉(zhuǎn)換成文字
更多信息可以查看:Converting number into words in Oracle
SELECTTO_CHAR(TO_DATE(1526,'j'),'jsp')FROMDUAL;
輸出:
onethousandfivehundredtwenty-six
在包的源代碼中查詢字符串
這個查詢語句會在所有包的源代碼上搜索‘FOO_SOMETHING’ ,可以幫助用戶在源代碼中查找特定的存儲過程或者是函數(shù)調(diào)用染乌。
--searchastringfoo_somethinginpackagesourcecode
把用逗號分隔的數(shù)據(jù)插入的表中
當(dāng) 你想把用逗號分隔開的字符串插入表中的時候山孔,你可以使用其他的查詢語句,比如 IN 或者是 NOT IN 荷憋。這里我們把‘AA,BB,CC,DD,EE,FF’轉(zhuǎn)換成包含 AA,BB台颠,CC 等作為一行的表,這樣你就很容易把這些字符串插入到其他表中勒庄,并快速的做一些相關(guān)的操作串前。
WITHcsv
查詢表中的最后一個記錄
這個查詢語句很直接,表中沒有主鍵实蔽,或者是用戶不確定記錄最大主鍵是否是最新的那個記錄時荡碾,就可以使用這個語句來查詢表中最后一個記錄。
SELECT*
在 Oracle 中做行數(shù)據(jù)乘法
這個查詢語句使用一些復(fù)雜的數(shù)學(xué)函數(shù)來做每個行的數(shù)值乘法局装。更多內(nèi)容請查閱:Row Data Multiplication In Oracle
WITHtbl
在 Oracle 生成隨機(jī)數(shù)據(jù)
每個開發(fā)者都想能輕松生成一堆隨機(jī)數(shù)據(jù)來測試數(shù)據(jù)庫多好坛吁,下面這條查詢語句就可以滿足你,它可以在 Oracle 中生成隨機(jī)的數(shù)據(jù)插入到表中铐尚。詳細(xì)信息可以查看Random Data in Oracle
SELECTLEVELempl_id,
在 Oracle 中生成隨機(jī)數(shù)值
這是 Oracle 普通的舊的隨機(jī)數(shù)值生成器拨脉。這個可以生成 0-100 之間的隨機(jī)數(shù)值,如果你想自己設(shè)置數(shù)值范圍宣增,那么改變乘數(shù)就可以了玫膀。
--generaterandomnumberbetween0and100
檢查表中是否含有任何的數(shù)據(jù)
這個可以有很多中寫法,你可以使用 count(*) 來查看表里的行的數(shù)量爹脾,但是這個查詢語句比較高效和快速帖旨,而且我們只是想知道表里是否有任何的數(shù)據(jù)。
SELECT1
如果你知道一些很好用的查詢語句灵妨,可以減輕 Oracle 開發(fā)者的負(fù)擔(dān)碉就,那么在評論分享一下吧:)
以上就是40+ 個非常有用的 Oracle 查詢語句的全文介紹,希望對您學(xué)習(xí)和使用Oracle有所幫助.
如果有什么不同的看法可以加群一起交流學(xué)習(xí)心得【588678536】