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.mzph.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…