iT邦幫忙

1

Oeacle 常用函式筆記 2

開始學習PL/SQL的陣痛期,將一些沒使用過的涵式及術語定義紀錄下來
前篇 : Oeacle 常用函式筆記 1

函式

Coalesce(n1, n2)

列表中第一個非空的表達式是函數的返回值,假如所有的表達式都是空值,最終將返回一個空值。

select Coalesce('A', 'B', 'C') from dual
-- 結果: A

select Coalesce(null, 'B') from dual
-- 結果: B

select Coalesce(null, null) from dual
-- 結果: null

參考 : NVL , NVL2 ,COALESCE ,DECODE用法

EXISTS

在Oracle中, 在判斷資料是否存在與否, 除了用 IN, BETWEEN 之外, 還有另一種選擇, 就是用 "EXISTS"。

exists (子查詢)
-- 若子查詢有返回值則 return true 反之則 return false

子查詢中不要用select count(*), 這樣無論如何, 都會有值取回,也就是 exists 結果都是 true

使用範例 :

select * from tom1
where aa >= 2
and exists( select xx
            from tom2
            where xx = tom1.aa
          );

參考 : Oracle PL/SQL: 關於 Exists 用法

sequence

在 Oracle 中可以建立 sequence 也就是序列號,每次取用後自動增加值。

CREATE SEQUENCE sequence名稱  
INCREMENT BY 1  -- 每次加幾個  
START WITH 1    -- 從1開始計數  
NOMAXVALUE      -- 不設置最大值  
NOCYCLE         -- 一直累加,不循環  
CACHE 10;  

定義完成後就可以用CURRVALNEXTVAL涵式

  • CURRVAL : 返回 sequence的當前值
  • NEXTVAL : 增加 sequence的值,然返回 sequence 值

參考 : Oracle的Sequence用法

rownum

在 Oracle 使用 rownum 欄位時會根據你SELECT的資料建立順序給予序號,所以如果有ORDER BY 欄位,rownum 的順序並不會按照順序呈現,這是因為 rownum 會在排序前先配置好的緣故。

參考 : Oracle rownum / row_number / rank / dense_rank 這四個的差異

查詢資料庫連結 DB_LINK

在oracle中要跨資料庫查詢需要建立db_link,要查詢目前已有的db_link方式可以透過已下兩種方式

  • 直接透過sql developer 查詢

https://ithelp.ithome.com.tw/upload/images/20190514/20110503h8HrDhe7cR.jpg

  • 使用語法查詢
select * from dba_db_links;

參考 : oracle 查看 、创建、删除 dblink

%Type

%TYPE 是 Procedure 定義變數的一種方法,
V_StudentID students.id%TYPE 表示的含義:變數V_StudentID 與students表中id的欄位資料類型一致,長度也一致,當students中id的資料類型改變時,那麼V_StudentID的資料類型也會跟著改變。

參考 : Oracle %TYPE %ROWTYPE

筆記內容如果有錯誤歡迎留言告知,可以幫忙糾正錯誤的觀念,感謝!


1 則留言

0
尼克
iT邦高手 1 級 ‧ 2019-05-17 08:35:54

函式 這字比較適當

wayneli iT邦新手 5 級‧ 2019-05-17 10:44:35 檢舉

/images/emoticon/emoticon41.gif

我要留言

立即登入留言