您的位置:首页 > 娱乐 > 八卦 > 惠州网络推广专员_聊城app开发公司_seo软件优化_seo价格是多少

惠州网络推广专员_聊城app开发公司_seo软件优化_seo价格是多少

2025/8/23 0:19:48 来源:https://blog.csdn.net/2302_81846649/article/details/146597398  浏览:    关键词:惠州网络推广专员_聊城app开发公司_seo软件优化_seo价格是多少
惠州网络推广专员_聊城app开发公司_seo软件优化_seo价格是多少

目录

一、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,...
    );

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com