2008年11月20日 星期四

[Oracle] 連線與資料搜尋

連線至資料庫

一開始 Oracle 安裝完成後,除了系統管理員(SYS、SYSTEM、SYSMAN) 之外,其他帳號都是被鎖住的,因此若是要使用其他帳號登入的話,必須先將帳號解除鎖定,以下示範將帳號「hr」解除鎖定:

在 Oracle 中,schema 的名稱跟 user 名稱是相同的

除了這個跟 SQL Server 與 MySQL 不太一樣,Oracle 也只有一個 database,而分類的方式就是利用 schema 的方式進行分類,然後再用與 schema 名稱相同的使用者名稱進行資料庫的連線。

SID 即為 Oracle database 名稱

在連線資料庫的時候,必須指定 SID,而 SID 指的就是 Oracle database 的名稱;而由於每個 Oracle 只有一個 database,因此 SID 在 Oracle 安裝時就會設定好,並且要記好。


Select + Regular Expression

範例一:搜尋 job_id 的值中包含 man 或是 mgr 且大小寫不拘的員工

詳細使用方式可以參考官方網站說明


範例二:搜尋 last_name 的值中包含兩個母音字母(a、e、i、o、u)且大小且不拘的員工

其中「\1」代表第一個 pattern,也就是「([aeiou])」。(每個 pattern 都會由小括號包起來)

詳細使用方式可以參考官方網站說明


範例三:將搜尋結果的電話格式由「nnn.nnn.nnnn」改為「(nnn) nnn-nnnn」


詳細使用方式可以參考官方網站說明


範例四:搜尋地址的街道號碼(格式可能為「1234」、「123-34」或是「12-34-56」)


其中 regexp_substr() 中的後兩個參數為 1,分別代表「從第一個字元開始搜尋」以及「符合搜尋條件幾次」,詳細使用方式可以參考官方網站說明


範例五:判斷地址中有幾個空白字元


詳細使用方式可以參考官方網站說明


範例六:取得地址中諦一個空白所出現的位置索引


其中 regexp_instr() 中的後兩個參數為 1,分別代表「從第一個字元開始搜尋」以及「符合搜尋條件幾次」,詳細使用方式可以參考官方網站說明


Built-in & Aggregate Function

範例一:搜尋員工在職時間



範例二:列出員工年資



範例三:列出目前系統時間


PS. 搜尋 DUAL table 會被罵 dummy 喔! Orz


範例四: 字串格式化 01 (原本格式範例:「01-7月 -98」)



範例五:字串格式化 02 (原本格式範例:「01-7月 -98」)


範例六:字串格式化 03 (原本格式範例:「2600」)



範例七:將字串轉為數字並進行運算



範例八:同時使用多個 aggregation function


許多 function 都已經內建於 Oracle 中,例如:ROUND、TRUNC、LOWER、UPPER、INITCAP、LTRIM….等等,都可以直接拿來使用。

當然這些 function 的數量很多,很難一一介紹,如果想知道 Oracle 提供了哪些 function 以及要如何使用,可以參考官方網站的文件


範例九:在 job_id 有 CLERK 字眼的群組中,取得 salary 為 3000 的排名以及多少百分比



範例十:查詢員工與獎金相關資料(使用 NVL 與 NVL2)


範例十一:使用 CASE 函數進行年資調整


CASE 的詳細使用方式可以參考官方網站說明


範例十二:使用 DECODE 函數進行資料比對與條件判斷


DECODE 的詳細使用方式可以參考官方網站說明

若要進一步瞭解 Oracle 提供的 Aggregation Function 有哪些,以及詳細的使用方式,可以參考官方網站的文件說明;而 Expression 的部份,可以參考此處

沒有留言:

張貼留言