Oracle數據庫數據編程SQL<2.2 DDL 視圖、序列>

目錄

一、Oracle 視圖(Views)

(一) Oracle 視圖特點

(二)Oracle 視圖創建語法

關鍵參數:

(三)Oracle 視圖類型

1、普通視圖

2、連接視圖(可更新)

3、對象視圖

4、物化視圖(Materialized Views)

(四) Oracle 視圖數據字典

(五)Oracle 可更新視圖規則

(六)視圖的優缺點

1、視圖的優點:

2、視圖的缺點:

3、視圖和表的區別

二、Oracle 序列(Sequences)

(一)Oracle 序列特點

(二)Oracle 序列創建語法

重要參數:

(三)Oracle 序列操作

1、基本使用

2、修改序列

3、刪除序列

(四)Oracle 序列數據字典

(五)Oracle 序列高級特性

1、緩存優化

2、循環序列

3、會話級序列(RAC環境)

(六)Oracle 12c+ 序列增強

1、標識列(IDENTITY)

2、默認序列值

三、Oracle 特有功能

(一)物化視圖(Materialized Views)

1、創建刷新物化視圖

2、物化視圖日志

3、快速刷新

(二)序列與觸發器結合

(三)視圖與PL/SQL集成

四、Oracle 最佳實踐

(一)視圖最佳實踐

(二)序列最佳實踐

五、常見問題解決方案

(一)視圖問題

問題1:視圖變無效

問題2:視圖性能差

(二)序列問題

問題1:序列緩存丟失

問題2:序列達到MAXVALUE

問題3:需要重置序列

六、Oracle 20c/21c 新特性

(一)視圖增強

SQL宏視圖:

JSON關系視圖:

(二)序列增強


一、Oracle 視圖(Views)

(一) Oracle 視圖特點

Oracle 視圖具有以下獨特特性:

  • 1. 強大的安全控制:可通過視圖實現行級和列級安全

  • 2. 優化器集成:Oracle 優化器能對視圖查詢進行高級優化

  • 3. 視圖約束:支持在視圖上定義約束

  • 4. 對象視圖:可以基于對象類型創建視圖

  • 5. 物化視圖:Oracle 特有的高性能視圖類型

  • ·視圖名一般以v開頭

    ·可以設置成只讀模式 with read only

    ·修改視圖相當于對原表進行修改

    !!!!!在工作中一般禁止用視圖修改原表!!!!!!

    占的空間小,保密性高

(二)Oracle 視圖創建語法

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW [schema.]view_name
[(column1, column2, ...)]
AS subquery
[WITH {CHECK OPTION [CONSTRAINT constraint_name] | READ ONLY | CONSTRAINT constraint_name}];create{or replace(有的話覆蓋先前)} view 視圖名 as select語句{with read only---設置成只讀}

關鍵參數

  • FORCE:即使基表不存在也創建視圖

  • NOFORCE:默認,基表必須存在

  • WITH CHECK OPTION:確保通過視圖的DML操作滿足視圖條件

  • READ ONLY:禁止通過視圖進行DML操作

(三)Oracle 視圖類型

1、普通視圖

CREATE VIEW emp_dept_view AS
SELECT e.employee_id, e.last_name, e.salary, d.department_name
FROM employees e JOIN departments d 
ON e.department_id = d.department_id;

2、連接視圖(可更新)

CREATE VIEW emp_dept_updatable AS
SELECT e.employee_id, e.last_name, e.salary, e.department_id, d.department_name
FROM employees e 
JOIN departments d ON e.department_id = d.department_id
WHERE d.location_id = 1700
WITH CHECK OPTION CONSTRAINT emp_dept_check;

3、對象視圖

CREATE TYPE emp_obj AS OBJECT (emp_id NUMBER,emp_name VARCHAR2(100),salary NUMBER
);CREATE VIEW emp_obj_view OF emp_obj
AS SELECT employee_id, last_name, salary FROM employees;

4、物化視圖(Materialized Views)

CREATE MATERIALIZED VIEW mv_emp_summary
REFRESH COMPLETE ON DEMAND
AS SELECT department_id, COUNT(*) emp_count, AVG(salary) avg_salFROM employeesGROUP BY department_id;

(四) Oracle 視圖數據字典

查看視圖信息:

-- 用戶視圖定義
SELECT * FROM USER_VIEWS WHERE VIEW_NAME = 'EMP_DEPT_VIEW';-- 視圖依賴關系
SELECT * FROM USER_DEPENDENCIES WHERE NAME = 'EMP_DEPT_VIEW';-- 視圖列信息
SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'EMP_DEPT_VIEW';

(五)Oracle 可更新視圖規則

Oracle 允許在以下條件下通過視圖進行DML操作:

  1. 視圖不包含集合操作(UNION, INTERSECT等)

  2. 不包含GROUP BY, CONNECT BY, START WITH子句

  3. 不包含聚合函數

  4. 不包含DISTINCT

  5. 不包含ROWNUM偽列

  6. 涉及的所有表必須具有主鍵約束

(六)視圖的優缺點

1、視圖的優點:

(1)使用視圖,可以定制用戶數據,聚焦特定數據

(2)使用視圖,可以簡化數據

(3)使用時圖,對基表中的數據有一定的安全性

(4)使用視圖,可以合并分離的數據,創建分區視圖

2、視圖的缺點:

(1)性能差

(2)修改限制

3、視圖和表的區別

(1)視圖是已經編譯好的sql語句,而表不是

(2)視圖沒有實際的物理記錄,而表有

(3)表是內容,視圖是窗口

(4)表只用物理空間而視圖不占用物理空間,視圖只是邏輯概念的存在

? ? ? ? ?表可以及時對他修改,但視圖只能由創建語句來修改

(5)表是內模式,視圖是外模式

(6)視圖是查看數據表的一種方法,可以查詢數據表中某些字段構成的數據,

? ? ? ? ?只是一些sql語句的集合,從安全角度說,試圖可以不給用戶接觸數據表,從而不知道表結構

(7)表屬于全局模式中的表,是實表;視圖屬于局部模式的表,是虛表

(8)視圖的建立和刪除只影響視圖本身,不影響對應的基表

二、Oracle 序列(Sequences)

(一)Oracle 序列特點

Oracle 序列提供以下特性:

  • 1、高性能:序列值緩存于內存,減少磁盤I/O

  • 2、事務安全:序列值生成不受事務回滾影響

  • 3、可配置性:靈活控制序列行為

  • 4、不連續保證:可能產生間隙,不適合嚴格連續場景

(二)Oracle 序列創建語法

CREATE SEQUENCE [schema.]sequence_name[INCREMENT BY increment][START WITH start][MAXVALUE maxvalue | NOMAXVALUE][MINVALUE minvalue | NOMINVALUE][CYCLE | NOCYCLE][CACHE cache_size | NOCACHE][ORDER | NOORDER][SESSION | GLOBAL];數據庫中一個特殊存放等差數列的表。
主要用于提供主鍵值。
create sequence 序列名
start with 數1                  --從幾開始
maxvalue 數2                    --最大值,到幾結束
{minvalue 數3/nominvalue}       --最小值,不寫每個最小值默認1
increment by 數4                --一次增加幾。等差,步長
cache/nocache 數5               --緩存值,提前運行多少次放在內存里。不寫默認20--緩存值(類似于看視頻提前緩存)--默認20, 必須小于循環次數即:cache<maxvalue
cycle/nocycle                   --是否循環。默認不循環
select 序列名.nextval from dual;---下一個值
select 序列名.currval from dual;---當前值

重要參數

  • CACHE:默認20,建議高并發系統增大緩存

  • ORDER:確保序列值按請求順序生成(僅RAC環境需要)

  • SESSION/GLOBAL:序列作用域(僅RAC環境)

(三)Oracle 序列操作

1、基本使用

-- 獲取下一個值
SELECT sequence_name.NEXTVAL FROM dual;-- 獲取當前值(不遞增)
SELECT sequence_name.CURRVAL FROM dual;-- 在DML中使用
INSERT INTO orders(order_id, ...) 
VALUES (order_seq.NEXTVAL, ...);

2、修改序列

ALTER SEQUENCE sequence_name[INCREMENT BY increment][MAXVALUE maxvalue | NOMAXVALUE][MINVALUE minvalue | NOMINVALUE][CYCLE | NOCYCLE][CACHE cache_size | NOCACHE][ORDER | NOORDER];

注意:不能修改START WITH值,必須刪除重建

3、刪除序列

DROP SEQUENCE sequence_name;

(四)Oracle 序列數據字典

-- 用戶序列信息
SELECT * FROM USER_SEQUENCES;-- 序列權限
SELECT * FROM USER_TAB_PRIVS WHERE TABLE_NAME = 'SEQUENCE_NAME';

(五)Oracle 序列高級特性

1、緩存優化

CREATE SEQUENCE high_perf_seq
CACHE 100;  -- 適合高并發系統

2、循環序列

CREATE SEQUENCE cyclic_seq
START WITH 1
INCREMENT BY 1
MAXVALUE 5
MINVALUE 1
CYCLE;

3、會話級序列(RAC環境)

CREATE SEQUENCE session_seq
SESSION;  -- 每個會話有獨立序列值

(六)Oracle 12c+ 序列增強

1、標識列(IDENTITY)

Oracle 12c引入了類似自增列的語法:

CREATE TABLE orders (order_id NUMBER GENERATED ALWAYS AS IDENTITY,order_date DATE,...
);

2、默認序列值

CREATE TABLE employees (emp_id NUMBER DEFAULT emp_seq.NEXTVAL,...
);

三、Oracle 特有功能

(一)物化視圖(Materialized Views)

1、創建刷新物化視圖

CREATE MATERIALIZED VIEW mv_sales_monthly
REFRESH COMPLETE ON DEMAND
ENABLE QUERY REWRITE
AS SELECT TRUNC(sale_date, 'MONTH') AS month,product_id,SUM(amount) AS total_amountFROM salesGROUP BY TRUNC(sale_date, 'MONTH'), product_id;

2、物化視圖日志

CREATE MATERIALIZED VIEW LOG ON sales 
WITH ROWID, SEQUENCE(amount, sale_date, product_id)
INCLUDING NEW VALUES;

3、快速刷新

CREATE MATERIALIZED VIEW mv_sales_daily
REFRESH FAST ON COMMIT
AS SELECT TRUNC(sale_date) AS day,product_id,SUM(amount) AS total_amountFROM salesGROUP BY TRUNC(sale_date), product_id;

(二)序列與觸發器結合

CREATE OR REPLACE TRIGGER trg_emp_id
BEFORE INSERT ON employees
FOR EACH ROW
BEGINIF :NEW.employee_id IS NULL THEN:NEW.employee_id := emp_seq.NEXTVAL;END IF;
END;
/

(三)視圖與PL/SQL集成

CREATE OR REPLACE VIEW emp_dept_plsql AS
SELECT e.*, d.department_name,CASE WHEN e.salary > 10000 THEN 'High'WHEN e.salary > 5000 THEN 'Medium'ELSE 'Low' END AS salary_grade
FROM employees e JOIN departments d 
ON e.department_id = d.department_id;

四、Oracle 最佳實踐

(一)視圖最佳實踐

  1. 命名規范:使用V_前綴(如V_EMP_DEPT)

  2. 安全控制:通過視圖限制敏感數據訪問

  3. 性能監控:定期檢查視圖執行計劃

  4. 注釋文檔:為視圖添加注釋說明

    COMMENT ON VIEW v_emp_dept IS 'Employee with department information';
  5. 避免過度嵌套:限制視圖嵌套層級(建議不超過3層

(二)序列最佳實踐

  1. 緩存設置:生產環境建議CACHE >= 20

  2. 命名規范:使用SEQ_前綴(如SEQ_ORDER_ID)

  3. 監控使用:定期檢查序列接近MAXVALUE情況

    SELECT sequence_name, last_number, max_value 
    FROM user_sequences 
    WHERE last_number/max_value > 0.9;
  4. RAC環境:使用ORDER序列確保全局順序

  5. 避免循環:生產環境慎用CYCLE選項

五、常見問題解決方案

(一)視圖問題

問題1:視圖變無效

-- 重新編譯無效視圖
ALTER VIEW view_name COMPILE;-- 查找所有無效視圖
SELECT object_name FROM user_objects 
WHERE object_type = 'VIEW' AND status = 'INVALID';

問題2:視圖性能差

-- 添加提示(Hint)
CREATE OR REPLACE VIEW v_fast_emp AS
SELECT /*+ INDEX(e emp_dept_idx) */ e.*, d.department_name
FROM employees e JOIN departments d ON e.department_id = d.department_id;

(二)序列問題

問題1:序列緩存丟失

-- 增大緩存減少問題
ALTER SEQUENCE seq_name CACHE 100;

問題2:序列達到MAXVALUE

-- 修改序列(需要足夠權限)
ALTER SEQUENCE seq_name MAXVALUE 999999999999;-- 或創建新序列
CREATE SEQUENCE seq_name_new START WITH 1000000;

問題3:需要重置序列

-- 使用以下PL/SQL過程重置序列
DECLAREv_nextval NUMBER;
BEGINEXECUTE IMMEDIATE 'ALTER SEQUENCE seq_name INCREMENT BY -999999';SELECT seq_name.NEXTVAL INTO v_nextval FROM dual;EXECUTE IMMEDIATE 'ALTER SEQUENCE seq_name INCREMENT BY 1';
END;
/

六、Oracle 20c/21c 新特性

(一)視圖增強

  1. SQL宏視圖

    CREATE OR REPLACE VIEW v_emp_dept_macro
    AS SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments);
  2. JSON關系視圖

CREATE OR REPLACE VIEW v_json_emp 
AS SELECT e.employee_id, JSON_OBJECT('name' VALUE e.last_name, 'salary' VALUE e.salary) AS emp_dataFROM employees e;

(二)序列增強

  1. SCALABLE序列(21c):

    CREATE SEQUENCE seq_scalable SCALE EXTEND;
    -- 生成更短的唯一ID,適合分布式環境
  2. 會話級序列默認值

    CREATE TABLE session_orders (id NUMBER DEFAULT ON NULL seq_session.NEXTVAL,...
    );

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73986.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73986.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73986.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QtAdvancedStylesheets使用

QtAdvancedStylesheets 是一個基于 Qt Widgets 的樣式表(QSS)增強庫,允許開發者通過類似 CSS 的方式深度定制 Qt 應用程序的界面風格,支持動態主題切換、動畫效果和復雜控件樣式設計。 1. 核心功能 高級樣式表支持 使用 CSS-like 語法美化 Qt Widgets(如 QPushButton、Q…

QtAV入門

QtAV 是一個基于 FFmpeg 和 Qt 的高性能多媒體播放框架,提供強大的音視頻解碼、渲染和處理能力,適合開發跨平臺的播放器、視頻編輯和流媒體應用。 1. 核心功能 多格式支持 支持 H.264/H.265、VP9、AV1 等視頻編碼。 支持 MP3、AAC、Opus 等音頻編碼。 封裝格式:MP4、MKV、…

[ C++ ] | C++11 從左值引用到右值引用

&#xff08;目錄占位&#xff09; 1. 前言&#xff1a; C 11 是在 C 98 之后又一個變化比較大的標準。為C增加了很多東西&#xff0c;其中有一部分是有用的&#xff0c;有一部分是我自認為作用不是很大東西。這一章呢&#xff1f;我們就來說說C11我&#xff0c;我認為對性能…

基于MCU實現的電機轉速精確控制方案:軟件設計與實現

本文將詳細介紹一篇基于微控制器&#xff08;MCU&#xff09;的電機轉速精確控制的軟件方案。通過采樣PWM信號控制和ADC采樣技術&#xff0c;結合PID閉環控制算法&#xff0c;實現了電機轉速的高效、穩定調節。以下是軟件方案流程圖&#xff0c;下文將對其進行展開講解。 原圖太…

Jmeter觸發腳本備份

JMeter 在以下情況會觸發腳本備份&#xff1a; 手動保存測試計劃時&#xff1a;如果測試計劃有未保存的修改&#xff0c;當用戶手動保存測試計劃&#xff08;腳本&#xff09;時&#xff0c;JMeter 都會自動將當前腳本備份到${JMETER_HOME}/backups文件夾下。 關閉 JMeter 時…

AI人工智能-PyCharm的介紹安裝應用

下載與安裝 創建python項目 項目路徑&#xff1a;C:\Users\miloq\Desktop\python_project 配置環境 提前找到conda配置的python-base路徑 配置conda環境 運行項目 運行結果

Flink內存模型--flink1.19.1

Flink 的 JobManager 和 TaskManager 在內存分配上有不同的職責和結構。以下是兩者的內存分類及詳細說明&#xff1a; 一、JobManager 內存分類 JobManager 主要負責作業調度、協調&#xff08;如 Checkpoint 協調&#xff09;、資源管理等&#xff0c;其內存需求相對較低&…

華為數字化轉型-方法篇

1 方法篇-3-愿景驅動的數字化轉型規劃 1.2 業務戰略是數字化轉型的龍頭 1.3 數字時代&#xff0c;企業需要適時地調整業務戰略 1.3.1 引入數字化商業模式 引入數字化商業模式包括改變與客戶做生意的方式&#xff0c;改變銷售的渠道&#xff0c;基于產業互聯網重新定位與行 業…

常用的排序算法------練習4

1. 題目 2. 思路和題解 這道題是很經典的荷蘭國旗問題&#xff0c;根據題目意思&#xff0c;要對這個數組按照顏色排序&#xff0c;而此時現在的紅、白、藍三個顏色分別對應0&#xff0c;1&#xff0c;2&#xff0c;因此可以想到使用冒泡排序對該數組進行排序。 代碼如下&…

傳統神經網絡、CNN與RNN

在網絡上找了很多關于深度學習的資料&#xff0c;也總結了一點小心得&#xff0c;于是就有了下面這篇文章。這里內容較為簡單&#xff0c;適合初學者查看&#xff0c;所以大佬看到這里就可以走了。 話不多說&#xff0c;上圖 #mermaid-svg-Z3k5YhiQ2o5AnvZE {font-family:&quo…

1371. 貨幣系統-dp背包問題

給定 V種貨幣&#xff08;單位&#xff1a;元&#xff09;&#xff0c;每種貨幣使用的次數不限。 不同種類的貨幣&#xff0c;面值可能是相同的。 現在&#xff0c;要你用這 V種貨幣湊出 N 元錢&#xff0c;請問共有多少種不同的湊法。 輸入格式 第一行包含兩個整數 V 和 N…

python和Java的區別

Python和Java是兩種流行的編程語言&#xff0c;它們之間有一些重要的區別&#xff1a; 語法&#xff1a;Python是一種動態類型的腳本語言&#xff0c;語法簡潔明了&#xff0c;通常使用縮進來表示代碼塊。Java是一種靜態類型的編程語言&#xff0c;語法更為嚴格&#xff0c;需要…

正則化是什么?

正則化&#xff08;Regularization&#xff09;是機器學習中用于防止模型過擬合&#xff08;Overfitting&#xff09;的一種技術&#xff0c;通過在模型訓練過程中引入額外的約束或懲罰項&#xff0c;降低模型的復雜度&#xff0c;從而提高其泛化能力&#xff08;即在未見數據上…

計算機網絡——傳輸層(TCP)

傳輸層 在計算機網絡中&#xff0c;傳輸層是將數據向上向下傳輸的一個重要的層面&#xff0c;其中傳輸層中有兩個協議&#xff0c;TCP&#xff0c;UDP 這兩個協議。 TCP 話不多說&#xff0c;我們直接來看協議報頭。 源/目的端口號&#xff1a;表示數據從哪個進程來&#xff0…

界面控件DevExpress WinForms v25.1 - 人工智能(AI)方面全新升級

DevExpress WinForms擁有180組件和UI庫&#xff0c;能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序&#xff0c;無論是Office風格的界面&#xff0c;還是分析處理大批量的業務數據&#xff0c;它都能輕松勝…

WinFrom真入門(1)——Windows窗體應用概念

窗體的基本結構 用Winform開發的桌面程序&#xff0c;是在Windows操作系統上運行的&#xff0c;這個不用多說。窗體&#xff08;Form&#xff09;的作用?&#xff1a;窗體是用戶交互的容器&#xff0c;承載按鈕、文本框等控件&#xff0c;構成應用程序的界面?。 在Windows操…

scss預處理器對比css的優點以及基本的使用

本文主要在vue中演示&#xff0c;scss的基本使用。安裝命令 npm install sass sass-loader --save-dev 變量 SCSS 支持變量&#xff0c;可將常用的值&#xff08;如顏色、字體大小、間距等&#xff09;定義為變量&#xff0c;方便重復使用和統一修改。 <template><…

Postman 如何高效地轉換時間戳?

在 Postman 中&#xff0c;時間戳的處理對于 API 請求和響應的調試和測試至關重要&#xff0c;正確處理時間戳可以確保數據的準確性和一致性&#xff0c;而 Moment 庫和原生 JS 是兩種常見的處理方式。此外&#xff0c;我們還將介紹 Apifox&#xff0c;它提供了更直觀、更簡便的…

iptables學習記錄

一.四表 filter 表&#xff1a; 主要用于控制數據包的過濾&#xff0c;決定數據包是否允許進出及轉發 。比如設置規則允許特定 IP 訪問服務器的 SSH 端口&#xff08;22 端口&#xff09;&#xff0c;或禁止某些 IP 訪問網站端口&#xff08;80 或 443 端口 &#xff09;。可作…

前端自動創建react項目腳手架

步驟&#xff1a;在終端窗口運行如下命令&#xff1a; npm create vitelatest 也可以指定 vite包 版本&#xff0c; 例如&#xff1a; npm create vite4.1.0 npm執行npm install 很慢 還出現證書問題 執行命令行:npm install -g create-vite npm error code UNABLE_TO_GET_IS…