Oracle SQL 開發誤區探索

来源:http://www.cnblogs.com/hanzongze/archive/2017/06/20/oracle-sql-mistakes.html
-Advertisement-
Play Games

本文內容摘自《劍破冰山——Oracle開發藝術》一書。 1、避免對列運算 要善於通過等價改寫消除 SQL 中對列的運算,這樣可以避免索引無法使用。 2、消除隱式轉換 3、關註空格(避免粗心) 4、存儲過程與許可權 存儲過程有編譯和執行兩個階段,編譯階段,調用許可權和定義許可權是一樣的,而執行階段則不同。 ...


本文內容摘自《劍破冰山——Oracle開發藝術》一書。

1、避免對列運算

要善於通過等價改寫消除 SQL 中對列的運算,這樣可以避免索引無法使用。

2、消除隱式轉換

3、關註空格(避免粗心)

4、存儲過程與許可權

存儲過程有編譯和執行兩個階段,編譯階段,調用許可權和定義許可權是一樣的,而執行階段則不同。

5、提防 DDL 提交事務

DDL 語句會在當前 session 完成 commit 動作,即便這個 DDL 操作失敗了也依然如此。事實上,DDL 語句執行的第一步就是 commit,然後才是執行 DDL 本身,無論命令本身是否執行成功,只要 DDL 關鍵字出現,系統就會提交。在存儲過程中要避免因 DDL 出現而破壞了事務的原子性。

6、INSERT INTO 應列出全部欄位

7、OR 條件(註意加括弧)

8、SEQUENCE 中的 CACHE

剛創建的序列必須用 nextval 來獲取初始值,否則會提示 ORA-08002。如果設置了序列的 cache 後執行"alter system flush shared_pool"清空記憶體,會導致被緩存的序列號丟失。重啟資料庫也會導致 cache 中的連續號被清空。實際應用中一般不會要求序列連續,可以通過 cache 提高插入速度,且 cache 不應太小,一般也不要超過 300 個,再多性能提升也不明顯了。其實即便設置了 nocache,只要執行了 nextval(如插入失敗)就會導致斷號,所以 nocache 選項沒什麼用!

9、樹形查詢易錯處

過濾條件最好在 start with 後面和 connect by 後面都寫上,這樣才能有效的避免重覆展現記錄(where 後面可以省略),熟練且正確的使用樹形查詢是非常有用的,將會給工作帶來很大的方便。

10、小心保留字(V$RESERVED_WORDS,該視圖出現的 keyword 都是關鍵字)

其中 reserved 為 'Y' 那些關鍵字(也就是 plsqldev 中預設會變粗那些關鍵字)是不能直接作為標識符使用的,除非用雙引號包裹,但這會給查詢帶來不便。比較坑的關鍵字有 size、current_date 等。

11、函數索引陷阱

自定義函數使用函數索引,如果改變了函數代碼則必須重建函數索引,否則 Oracle 將使用這個函數索引查詢出錯誤的結果且不提示任何錯誤,這應該是 Oracle 的 BUG。

12、標量子查詢

標量子查詢只和外關聯語句寫法等價,與內關聯語句可能不等價。
標量子查詢要避免單行子查詢返回多個行,可以返回 0 或 1 行,否則就會包 ORA-01427 錯誤。因此使用標量子查詢的場合大多選擇在兩表關聯皆為主鍵的場合,在特定場合,業務允許一對多關聯並隨機取一條時,我們需用 rownum=1 來限制返回行數。

本文鏈接http://www.cnblogs.com/hanzongze/p/oracle-sql-mistakes.html
版權聲明:本文為博客園博主 韓宗澤 原創,作者保留署名權!歡迎通過轉載、演繹或其它傳播方式來使用本文,但必須在明顯位置給出作者署名和本文鏈接!個人博客,能力有限,若有不當之處,敬請批評指正,謝謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Environment MTK platform 測試電池容量 測試電池是從滿電,一般是 4.35V 開始放電, 放到 3.4V 結束, 累計放電量, 最下方是電池示意圖, 左邊是輕載,右邊是重載, 輕載時流過的電流較小,battery 內阻上的壓降較少,所以真正的 battery voltage ...
  • 1 首先打開cmd 執行 2 3 orapwd file=C:\app\PWDorcl.ora password=orclorcl 4 5 C:\app\PWDorcl.ora是你要存放的路徑文件 6 7 Password=orclorcl是你要改的密碼 8 9 然後回車,在該路徑下就會生成一個文件... ...
  • Oracle兩張表關聯批量更新其中一張表的數據 方法一(推薦): 尤其註意最後的外層where條件尤為重要,是鎖定其批量更新數據的範圍。 方法二: ...
  • 還原SQL SERVER系統庫 共需還原三個系統庫,還原順序:master>msdb>model (1).資料庫配置管理器->資料庫服務屬性->啟動參數->添加“-m”後,重啟sql服務,資料庫就進入了單用戶模式。 (2).打開資料庫管理工具 (3).彈出連接服務視窗,點擊“取消” (4).點擊“新 ...
  • normal:表示普通索引 unique:表示唯一的,不允許重覆的索引,如果該欄位信息保證不會重覆例如身份證號用作索引時,可設置為unique full textl: 表示 全文搜索的索引。 FULLTEXT 用於搜索很長一篇文章的時候,效果最好。用在比較短的文本,如果就一兩行字的,普通的 INDE ...
  • 要啟動和關閉資料庫,必須要以具有Oracle 管理員許可權的用戶登陸,通常也就是以具有SYSDBA許可權的用戶登陸。一般我們常用SYS用戶以SYSDBA連接來啟動和關閉資料庫。下麵介紹Oracle資料庫幾種不同的資料庫啟動和關閉方式之間的區別以及它們各自不同的功能。 一、資料庫的啟動(STARTUP) ...
  • 1.通過mysql資料庫的user表查看用戶相關信息 2.創建資料庫 3.創建用戶 user表中host列的值的意義 % 匹配所有主機 localhost localhost不會被解析成IP地址,直接通過UNIXsocket連接 127.0.0.1 會通過TCP/IP協議連接,並且只能在本機訪問; ...
  • oracle trunc函數使用介紹 核心提示:oracle trunc函數使用介紹 1.TRUNC(for dates) TRUNC函數為指定元素而截去的日期值。 其具體的語法格式如下: TRUNC(date[,fmt]) 其中: date 一個日期值 fmt 日期格式,該日期將由指定的元素格式所 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...