首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 同義詞、序列、視圖與異常處理全解析

     編輯:Oracle 資料庫基礎

本文系統整理 Oracle 核心對象操作:同義詞簡化訪問、序列生成唯一鍵、視圖封裝邏輯、異常處理機制,並針對常見誤區給出最佳實踐建議。

一、同義詞:簡化跨 Schema 訪問

語法分類

  • 私有同義詞:CREATE SYNONYM emp FOR scott.emp; 僅創建者可見
  • 指定 Schema 私有同義詞:CREATE SYNONYM system.emp FOR scott.emp; 需 CREATE ANY SYNONYM 權限
  • 公有同義詞:CREATE PUBLIC SYNONYM emp FOR scott.emp; 所有用戶可見,需 CREATE PUBLIC SYNONYM 權限

關鍵知識點

  1. 同義詞不替代權限:必須先 GRANT SELECT ON scott.emp TO user,否則公有同義詞也無法查詢數據
  2. 同名對象優先級:局部對象 > 私有同義詞 > 公有同義詞
  3. 查詢當前用戶同義詞:SELECT * FROM user_synonyms;

二、序列:自增主鍵的標準實現

核心參數

CREATE SEQUENCE emp_sequence
  INCREMENT BY 1
  START WITH 1
  NOMAXVALUE
  NOCYCLE
  CACHE 10;

避坑指南

  • NEXTVAL 每次調用遞增,同一語句多次調用值不同
  • CURRVAL 僅在首次 NEXTVAL 後可用,否則報 ORA-08002
  • CACHE 提升效能但可能導致跳號(如 SHUTDOWN ABORT 丟失緩存值)
  • 序列值不受事務回滾影響,ROLLBACK 後序列仍遞增
  • ALTER SEQUENCE 無法修改 START WITH 值

三、視圖:邏輯封裝與安全控制

CREATE VIEW view_dept (deptno, dname, loc) AS
SELECT deptno, dname, loc FROM scott.dept WHERE loc IN ('DALLAS','CHICAGO','BOSTON')
WITH READ ONLY;  -- 僅讀,防止誤更新

WITH CHECK OPTION 限制 DML 僅影響視圖可見行,與 WITH READ ONLY 互斥。

四、異常處理最佳實踐

BEGIN
  -- 業務邏輯
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    -- 處理查無數據
  WHEN TOO_MANY_ROWS THEN
    -- 處理多行結果
  WHEN OTHERS THEN
    -- 統一錯誤日誌記錄
    RAISE;  -- 重拋或自定義錯誤碼
END;

建議:業務異常顯式捕獲,系統異常記錄日誌後重拋,避免吞噬錯誤導致排查困難。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved