Oracle 有提供非常有用的 SQL 語法,
要介紹的就是 WITH 的函數,主要的功用就是將 SQL 查詢包進來,類似 VIEW 的功能,
這樣要進行 Update 或是比較複雜的查詢就可以用到。
語法: WITH 臨時的名稱 AS (SQL 查詢語法)
直接看範例,查詢所有製程工單未完工的製程序,所以就要把大於或等於有 WIP 量的製程序都列出來。
with ecm_wip as(
select ecm01 ecm01x,min(ecm03) ecm03x from ecm_file
where (ecm301+ecm302+ecm303-ecm311-ecm312-ecm313-ecm314-ecm316 <> 0 or ecm301+ecm302+ecm303 = 0)
group by ecm01)
select ecm01,ecm03,ecm301,ecm302,ecm303,ecm311,ecm312,ecm313,ecm314,ecm316,ecm315 from ecm_file,ecm_wip
where ecm01 = ecm01x
and ecm03 >= ecm03x
order by ecm01,ecm03
將有 WIP 量不為 0 或是還沒有發料的工單找出來取最小的製程序製作成一個臨時的 View,
然後再 JOIN 進來取等於或大於以後的製程序,這樣是不是就可以簡化許多了。
有了這個 WITH 的語法,我們寫 SQL 就可以將要查詢的資料先各別寫出來,然後再用 WITH 一一的拼裝起來,
最後再全部 JOIN 在一起就可以了,
我們也不需要為了專屬的 SQL 查詢,寫了許多共用的 VIEW 出來,也變的不容易閱讀。
當資料量越來越大時,不佳的查詢 SQL 語句就會影響系統的效能,好用的函數也是可以多加利用,
有複雜的 SQL 語句時記得要查看是否有 Full Scan Table 的情況。
沒有留言:
張貼留言