發表文章

目前顯示的是有「SQL」標籤的文章

Oracle REGEXP_LIKE 條件

圖片
圖片來源 Oracle REGEXP_LIKE 語法基本上與LIKE很類似,不過它可以使用正則運算式更簡單的實現。 另外,Oracle 也提供了其它運算函式 REGEXP_SUBSTR   與SUBSTR的功能相似 REGEXP_REPLACE 與REPLACE的功能相似  REGEXP_INSTR 與INSTR的功能相似 REGEXP_LIKE   與LIKE的功能相似   REGEXP_LIKE 語法: REGEXP_LIKE ( expression, pattern [, match_parameter ] )  1.expression :用於檢索值得欄位名稱(可以是這一些 VARCHAR2, CHAR, NVARCHAR2, NCHAR, CLOB or NCLOB pe.) 2.pattern:正規表示法,最多可指定達512位元組(Bytes) 3.match_parameter:變更檢索條件的選項(可以指定多個) 所有解釋可以看一下這一個網站說明解釋非常清楚 (中文的 陳鍾誠的網站 ) (英文網站 TechonTheNet ) 參考資源一    參考資源二

Oracle ORA-01427 : Single-rpw subquery returns more than on row

圖片
當執行Orale PL/SQL 查詢出現 ORA-01427 錯誤   SELECT id, SUM (man_min)     FROM workers_reported    WHERE id = (SELECT id                           FROM project                          WHERE type = 'MO' AND status = 'CLOSE') GROUP BY id, man_min 因為會產生一筆資料對多筆情況,此時Oracle回應ORA-01427 的錯誤訊息。 處理方式,Subquery 部份可以改採用 ALL/ANY/IN/NOT IN 方式處理,所以程式改為IN(或其它符合條件)即可。   SELECT project_id, SUM (man_min)     FROM ps_workers_reported    WHERE project_id IN (SELECT project_id                           FROM pj_project             ...

Otacle PL SQL Columns To Rows

圖片
Oracle PL SQL Row To Column 這一篇是剛好倒過來,同樣的一個網站可以 參考 他的標準寫法。 這一網站他提供了下列方法: Example # 1: Using the UNION operator Example # 2: Using the UNPIVOT operator EXCEL 的方式也可以作到,但是一般使用者都不會想這樣處理。

SQL 語法書籍介紹分享

圖片
勘誤表   範例程式 學習SQL語法基礎入門書籍,我推薦深入淺出SQL。 請注意本書的語法使用為MySQL,所以你是用Oracle 可能有一些些許不同之處。 內容很基礎從SELECT語法開始介紹,還有正規化的介紹及說明。(若是已經會使用SQL語法,就不推薦除非你想重溫正規化等等基礎觀念的加強) 本書內容著重介紹資料與表/SELECT/DELETE/UPDATE/ALTER/子查詢/外部聯結/自我聯結/聯集/限制條件/視關表View/交易/權限安全 等。唯獨進階如Tiger/Function/Procedure等等裡面是沒有介紹。 另外,我還一本目前已經絕版的書籍,真的內容很不錯。(目前僅有簡體版在出售中)。 這一本書籍屬於進階書籍有實際案例說明。另外,還會比對Oracle PL/SQL與 Microsoft T-SQL之間的作法比較。 內容前幾章著重於基礎函數及語法使用,後面進階的部份就包含很廣範如Column To Row/樹狀結構展開/累計加總/總計資料等等。 最後一部分介紹Procedure/Tiger/Cursor/Package/Connect By 功能使用。 基本上這一本書屬於實戰使用的工具寶典。 2016/05/30 Updated 另外, 學習Oracle 語法以及相關技術文件,其實Orcle原廠都有相關文可以參考,其中還有PDF可以下載及線上直接閱覽,唯一就是都是英文。 但是,相關技術文件都是用簡單英文基礎寫成,應該都是能夠看得懂。 Database SQL Language Reference Database PL/SQL Language Reference 這是一本工具書,有任何語法上的問題,容易著手查詢。(Oracle/SQL Server/DB2/MySQL/ANSI) 第一章:介紹SQL歷史,權限,VIew,Strore Procedure,Tigger,Sequence,別名及使用者定義型的基本入門介紹。 第二章: DLM   資料操縱語言(Data Manipulation Language, DML)SELECT/INSERT/UPDATE/DELETE 指令介紹。 DDL 資料定義語言 (Data ...

PL SQL 特殊符號的處理方法

圖片
我們在SQL 語法中要是使用到特殊符號時候,例如& /  ' 這一些如何在SQL 語法中呈現? --範例 I'm a teacher SELECT 'I' || '''m a teacher' FROM DUAL; 那如果要顯示一個 & 這一個符號,我們就需要使用ASCII 碼,那如何得知這一碼的代號方式, 利用語法得知如下: SELECT ASCII ('&') FROM DUAL; 可以得到 & 的 ASCII 碼是38 SELECT CHR (38) FROM DUAL; 反向過來ASCII碼 38 是 & SELECT 'Nick' || CHR (38) || 'Sherry' FROM DUAL 得的結果為:Nick&Sherry

SQL JOINS

圖片

Oracle PL SQL Row To Column

圖片
最近因為有需求需要處理Row to Column 剛好有買了一本書( 已經絕版 )嗯嗯,有印象翻一下書剛好說明如何實做及解說。(利用 PIVOT 方式) 再找了一些網站剛好有一些人解說其方法,其實不用PIVOT也可以使用SUM+DECODE 及 WITH+Sub  SELECT 來處理。 我是參考這 網站 說明得很清楚,大家可以參考一下,底下說明一下網站中介紹四種方法。 Example # 1a: Transpose rows into columns using SUM and DECODE to summarize data Example # 1b: Transpose rows into columns using MAX and DECODE – for non-summarized data Example # 2:  Transpose rows into columns using the Oracle PIVOT operator 注意一下Oracle 版本是否有支援PIVOT Example # 3: Transpose rows into columns using WITH and sub SELECTS 另外, Oracle 原廠 也有介紹及說明。 參考網址    參考網址 另外一篇 Otacle PL SQL Columns To Rows   EXCEL 也可以作到此功能: 原始資料如下:

Oracle SQL DISTINCT COUNT

如何在 PL/SQL 使用DISTINCT 在利用COUNT 計算筆數。 SELECT COUNT (*)   FROM (SELECT DISTINCT A, B FROM USE_TABLE)

Oracle PL/SQL TOP 10 語法

圖片
Oracle 要取資料前10名還真是麻煩,以T-SQL 一個語法 TOP 就可以完成。 Oracle PL/SQL 就必須使用SUBQUERY TOP 10 語法如下: SELECT *   FROM (  SELECT order_qty             FROM detail         ORDER BY 1 DESC)  WHERE ROWNUM = 10 TOP  11 BETWEEN 20 語法如下: SELECT order_qty   FROM (SELECT ROWNUM id, order_qty           FROM (  SELECT order_qty                     FROM detail                 ORDER BY 1 DESC))  WHERE id BETWEEN 11 AND 20 聽說Oracle 12c 有改進此語法,但是一個企業要升級資料庫很不簡單吧!

Oracle PLSQL SELECT DISTINCT 觀念

圖片
一直以來沒有把 DISTINCT觀念稿正確,結果為了一隻程式抓BUG,恍然大悟原來如此。 紀錄一下,原始的網站連結。 SQL SELECT with DISTINCT on multiple columns 圖片來源

Oracle Monitor tablespace free space and get email alerts

圖片
Monitor tablespace free space and get email alerts 這一個我自己設定為 procedure,可以監控 tablespace 到一個程度後,系統會自動發 mail 通知目前狀況。 大家可以參考一下,另外這參考網站有一些 文章 也不錯 Good for me。

Oracle 大量新增帳號方式

圖片
  二、 需要利用 Toad 工具修改 Oracle 資料庫帳號相關設定。 本案例當此帳號密碼過期使用者被鎖定時候,必須使用底下指令修改解鎖及修改密碼   /* 修改帳號解鎖,注意員工編號必須 “ 員工編號 ” */ alter user “ 員工編號 ” account unlock; /* 修改帳號密碼,注意密碼有區分大小寫 */ alter user “ 員工編號 ” identified by “ 新密碼 ”; commit;   三、 若是需要大量修改使用者解鎖 / 上鎖或統一修改密碼,請參照底下語法,提供大量帳號修改方法,產生 Alter user 指令碼: /* 修改大量帳號觧鎖方式 */ select 'alter user ' || '"' || username || '"' || ' account unlock;' from dba_users where account_status <> 'OPEN'   /* 修改大量帳號密碼方式 */ select 'alter user ' || '"' || username || '"' || ' identified by "sysgration"' || password || ';' from dba_users where account_status <> 'OPEN'   四、 將修改大量解鎖使用者帳號語法,貼在 Toad 工具裡面,執行後會產生下列 alter 語法   五、 在 Toad Data Grid 中按右鍵選擇 Export Dataset                                       六、 選擇要匯出的位置及檔名               ...