40+ 個非常有用的 Oracle 查詢語句医增,沒用你過來打我

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】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市闷串,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筋量,老刑警劉巖烹吵,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碉熄,死亡現(xiàn)場離奇詭異,居然都是意外死亡肋拔,警方通過查閱死者的電腦和手機(jī)锈津,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凉蜂,“玉大人琼梆,你說我怎么就攤上這事×裕” “怎么了茎杂?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纫雁。 經(jīng)常有香客問我煌往,道長,這世上最難降的妖魔是什么轧邪? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任刽脖,我火速辦了婚禮,結(jié)果婚禮上忌愚,老公的妹妹穿的比我還像新娘曲管。我一直安慰自己,他們只是感情好硕糊,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布院水。 她就那樣靜靜地躺著,像睡著了一般癌幕。 火紅的嫁衣襯著肌膚如雪衙耕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天勺远,我揣著相機(jī)與錄音橙喘,去河邊找鬼。 笑死胶逢,一個胖子當(dāng)著我的面吹牛厅瞎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播初坠,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼和簸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了碟刺?” 一聲冷哼從身側(cè)響起锁保,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后爽柒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吴菠,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年浩村,在試婚紗的時候發(fā)現(xiàn)自己被綠了做葵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡心墅,死狀恐怖酿矢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怎燥,我是刑警寧澤瘫筐,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站刺覆,受9級特大地震影響严肪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谦屑,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一驳糯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氢橙,春花似錦酝枢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坦康,卻和暖如春竣付,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滞欠。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工古胆, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人筛璧。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓逸绎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親夭谤。 傳聞我的和親對象是個殘疾皇子棺牧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容