精华内容
下载资源
问答
  • NULL 博文链接:https://xurichusheng.iteye.com/blog/1340473
  • 解决方法: 以dba用户登录 [sql] 代码如下: sqlplus / as sysdba 赋予scott用户创建VIEW的权限 [sql] 代码如下: grant create view to scott 以scott用户登录oracle [sql] 代码如下: conn scott/tiger 创建视图成功 ...
  • Oracle视图

    千次阅读 2019-06-09 17:37:00
    视图可以理解为数据库中一张虚拟的表。 它是建立在已有表的基础上, 赖以建立的这些表称为基表。 通过一张或者多张基表进行关联查询后组成一个虚拟的逻辑表。 查询视图,本质上是对表进行关联查询。 视图的本身...

    视图可以理解为数据库中一张虚拟的表。

    它是建立在已有表的基础上, 赖以建立的这些表称为基表。

    通过一张或者多张基表进行关联查询后组成一个虚拟的逻辑表。

    查询视图,本质上是对表进行关联查询。

     

    视图的本身是不包含任何数据,只是一个查询结果,当基表的数据发生变化时,视图里面的数据也会跟着发生变化。向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的SELECT语句。视图向用户提供基表数据的另一种表现形式。

     

    视图它可以使复杂的数据简单化,还可以对表结构设计的补充,控制数据的访问,避免重复访问相同的数据,增加了安全性。

     

    创建视图的语法如下:

     

    CREATE [OR REPLACE] VIEW view [(aliad[,alias]...)]

    AS [WITH READ ONLY CONSTRAINT]

     

    OR REPLACE:如果视图已经存在,则替换旧视图。

    WITH READ ONLY:默认不填的,用户是可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行 insert 操作,或者基表设置了某些约束,这时候插入视图或者修改视图的值,有可能会报错), WITH READ ONLY 说明视图是只读视图,不能通过该视图进行增删改操作。但是在现实开发中,基本上不通过视图对表中的数据进行增删改操作。

     

    视图也分成几个类别:

     

    简单视图是单个表并且不包含函数或表达式的视图,可以在该视图上可以执行DML语句(即可执行增、删、改操作)。

     

    复杂视图就是指那些包含函数、表达式或者分组数据的视图,在该视图上执行DML语句时必须要符合特定条件。通常我们在定义复杂视图时必须为函数或表达式定义别名。

     

    连接视图指那些基于多个表建立的视图,一般来说不会在该视图上执行INSERT、UPDATE、DELETE操作。

     

    只读视图就是只允许进行SELECT操作的视图,在该视图时指定WITHREADONLY选项。在这种视图上不能执行INSERT、UPDATE、DELETE的操作。

     

     

    CHECK约束视图在视图上定义CHECK约束,在该视图上执行INSERT或UPDATE操作时,数据必须符合查询结果。

     

    -- 创建简单视图:

    CREATE VIEW   empvu

    AS SELECT  employee_id, last_name, salary

    FROM    employees;

     

    --查询结果:

     

    CREATE VIEW 子句中各列的别名应和子查询中各列相对应。

     

    当视图定义中包含以下元素之一时不能使用delete:

    --组函数

    --GROUP BY 子句

    --DISTINCT 关键字

    --ROWNUM 伪列

     

    当视图定义中包含以下元素之一时不能使用update:

    --组函数

    --GROUP BY子句

    --DISTINCT 关键字

    --ROWNUM 伪列

    --列的定义为表达式

     

    当视图定义中包含以下元素之一时不能使insert:

    --组函数

    --GROUP BY 子句

    --DISTINCT 关键字

    --ROWNUM 伪列

    --列的定义为表达式

    --表中非空的列在视图定义中未包括

     

    删除视图只是删除视图的定义,并不会删除基表的数据

     

    -- 删除简单视图:

    DROP VIEW empvu;

     

    --查询结果:

    展开全文
  • 在使用Oracle数据库过程中,视图是作为数据库对象存在的,因而,在创建了这样的视图后,可以通过工具或者数据字典来查看视图的相关信息。视图来源于表,所有对视图数据的修改终都会被反映到视图的基表中,这些修改...
  • Oracle 视图和索引

    千次阅读 2020-05-30 21:45:21
    文章目录一、视图二、索引 一、视图 视图的概念:视图就是提供一个查询的窗口,所有数据来自于原表 语法 : CREATE VIEW 视图名称 AS 子查询 ---查询语句创建表 create table emp as select * from scott.emp; ...

    一、视图

    视图的概念:视图就是提供一个查询的窗口,所有数据来自于原表
    语法 : CREATE VIEW 视图名称 AS 子查询

    ---查询语句创建表
    create table emp as select * from scott.emp;
    select * from emp;
    ---创建视图【必须有dba权限】
    create view v_emp as select ename, job from emp;
    ---查询视图
    select * from v_emp;
    ---修改视图[不推荐],实际的数据也会改变
    update v_emp set job='CLERK' where ename='ALLEN';
    commit;
    ---创建只读视图
    create view v_emp1 as select ename, job from emp with read only;
    

    视图的作用?
    第一:视图可以屏蔽掉一些敏感字段。
    第二:保证总部和分部数据及时统一。(总部操纵实际的表,分部查询视图这样保证数据的统一)

    • 语法 1: CREATE VIEW 视图名称 AS 子查询
    • 范例:建立一个视图,此视图包括了 20 部门的全部员工信息
      在这里插入图片描述
    • 语法 : CREATE OR REPLACE VIEW 视图名称 AS 子查询
      在这里插入图片描述
    • 一般不会去修改视图,我们可以设置视图为只读
    • 语法 3:CREATE OR REPLACE VIEW 视图名称 AS 子查询 WITH READ ONLY
      在这里插入图片描述

    二、索引

    索引是用于加速数据存取的数据对象。 合理的使用索引可以大大降低 i/o 次数,从而提高数据访问性能。
    索引就是在表的列上构建一个二叉树,达到大幅度提高查询效率的目的,但是索引会影响增删改的效率。

    • 为什么添加了索引之后,会加快查询速度呢?
      图书馆:如果杂乱地放书的话检索起来就非常困难,所以将书分类,然后再建一个箱子,箱子里面放卡片,卡片里面可以按类查询,按书名查或者类别查,这样的话速度会快很多很多,这个就有点像索引。索引的好处就是提高你找到书的速度,但是正是因为你建了索引,就应该有人专门来维护索引,维护索引是要有时间精力的开销的,也就是说索引是不能乱建的。
      所以建索引有个原则:如果有一个字段如果不经常查询,就不要去建索引。现在把书变成我们的表,把卡片变成我们的索引,就知道为什么索引会快,为什么会有开销。

    • 单列索引:单列索引是基于单个列所建立的索引
      语法:CREATE index 索引名 on 表名(列名)

    • 复合索引:是基于两个列或多个列的索引。在同一张表上可以有多个索引,但是要求列的组合必须不同
      在这里插入图片描述

    • 索引的使用原则:
      在大表上建立索引才有意义;在 where 子句后面或者是连接条件上的字段建立索引;表中数据修改频率高时不建议建立索引;

    范例:给 person 表的 name 建立索引
    create index pname_index on person(name);
    范例:给 person 表创建一个 name 和 gender 的索引
    create index pname_gender_index on person(name, gender);
    
    ---单列索引
    ---创建单列索引
    create index idx_ename on emp(ename);
    ---单列索引触发规则,条件必须是索引列中的原始值。
    ---单行函数,模糊查询,都会影响索引的触发。
    select * from emp where ename='SCOTT'
    ---复合索引
    ---创建复合索引
    create index idx_enamejob on emp(ename, job);
    ---复合索引中第一列为优先检索列
    ---如果要触发复合索引,必须包含有优先检索列中的原始值。
    select * from emp where ename='SCOTT' and job='xx';---触发复合索引
    select * from emp where ename='SCOTT' or job='xx';---不触发索引
    select * from emp where ename='SCOTT';---触发单列索引。
    
    展开全文
  • Oracle 视图(2)修改视图

    千次阅读 2020-12-15 21:26:17
    修改视图有CREATE OR PEPLACE H和 ALTER VIEW ,需要注意四点: 1、视图的更改不会印象视图的基础表,因为视图只是基表的呈现方式。 2、在定义视图如果使用了 WITH CHECK OPTION 选项,但是修改时去掉了 WITH ...

            修改视图有CREATE OR PEPLACE H和 ALTER VIEW ,需要注意四点:
           1、视图的更改不会印象视图的基础表,因为视图只是基表的呈现方式。
           2、在定义视图如果使用了  WITH CHECK OPTION  选项,但是修改时去掉了  WITH CHECK OPTION  选项,那么对视图应用的约束会被清除。
           3、对视图进行修改后,所有依赖于该视图的其他视图或引用了视图的程序都会变为无效状态。
           4、对视图的基础表进行修改后,会导致视图失效,因此必须重新编译视图。

     

    一、重新编译视图

    --重新编译视图
    ALTER VIEW v_buser COMPILE;

    二、删除视图

    CASCADE CONSTRAINTS  用于级联删除视图上的约束。

    --删除视图
    DROP VIEW 视图名 [CASCADE CONSTRAINTS];

     

    展开全文
  • 实验六 视图和索引 实验目的 (1)了解视图的重要性 (2)掌握视图的建立 (3)掌握视图的使用 (4)掌握索引的使用方法 (5)掌握索引的概念及分类
  • 这是一个第三方的数据库视图,数据量大概有千万条可能不止。 采用单表查询某一条数据,加载时间过长,页面也会蹦掉,有没有什么优化方案, 从sql方面下手优化一下查询速度。 (只能查,没有别的权限。)
  • Oracle 视图详解(view)

    千次阅读 2020-06-03 21:31:49
    文章目录1 概述2 语法3 示例3.1 force 强制创建视图3.2 dml 操作3.3 with check option3.4 with read only 1 概述 -- 查询所有 view SELECT * FROM dba_views t; -- all_views, user_views -- 删除视图 DROP VIEW...

    1 概述

    在这里插入图片描述

    2 语法

    创建视图:

    create [or replace] [force] view [属主.]<view_name>
    (col1, col2, ..., colN) -- 可省略
    as
      select 语句
    [with check option]
    [with read only];
    

    关键字解释:

    1. or replace: 存在就替换原视图
    2. force: 强制执行,即使报错。常用来处理执行顺序导致的问题
    3. with check option: 插入或修改的数据行必须满足视图定义的约束
    4. with read only: 该执行上不能进行任何 dml 操作
    

    基础数据:

    create table stu_info (
      id   number(3) not null,
      name varchar2(30) not null,
      sex  varchar2(2) not null
    );
    
    insert into stu_info (id, name, sex) values (1, '瑶瑶', '女');
    

    查询&删除视图:

    -- 查询所有 view
    select * from dba_views t; -- all_views, user_views
    
    -- 删除视图 
    drop view 视图名;
    

    3 示例

    3.1 force 强制创建视图

    实际应用场景:DB 部署时,顺序是:DDL 语句 -> DML 语句 -> PKG
    若 DDL 语句中的 view 调用了 pkg,则部署时会产生报错(因为此时 pkg 还未部署),但此报错在 pkg 部署后会消失,此时便用到了 force。

    创建视图语句:

    CREATE OR REPLACE VIEW vw_stu_info AS (
     SELECT si.id,
            si.name,
            si.sex,
            f_get_class_no(si.id) class_no -- pkg 中,还未被执行(简单演示,就没写到 pkg 里面,但效果是一样的)
       FROM stu_info SI
    );
    /
    

    执行结果:
    在这里插入图片描述
    加上 force 后,执行成功

    CREATE OR REPLACE FORCE VIEW vw_stu_info AS (
     SELECT si.id,
            si.name,
            si.sex,
            f_get_class_no(si.id) class_no -- 假如有这个方法
       FROM stu_info SI
    );
    /
    
    • 小提示: 此时的 view 是 无效的哦,只有当 f_get_class_no 函数执行后,才是有效的。
    SELECT t.status, t.* FROM all_objects t WHERE t.OBJECT_NAME = UPPER('vw_stu_info');
    -- INVALID: 无效
    

    按顺序部署 pkg 中的方法:f_get_class_no(实际开发中,函数 是放在 pkg 里面的,此处仅作为测试使用)

    CREATE OR REPLACE FUNCTION f_get_class_no(v_id stu_info.id%TYPE)
       RETURN VARCHAR2 AS
       v_class_no VARCHAR2(10);
    BEGIN
       IF v_id < 5 THEN
          v_class_no := 'A001';
       ELSIF v_id >= 5 THEN
          v_class_no := 'A002';
       ELSE
          v_class_no := 'A000';
       END IF;
       
       RETURN v_class_no;
    END;
    /
    

    查询视图:

    SELECT * FROM vw_stu_info;
    

    查询结果:
    在这里插入图片描述

    3.2 dml 操作

    通常情况下,我们都只会对视图只会进行查询操作,但是要了解,视图也是可以进行 insert、update、delete 的哦,只是限制条件很多。

    • 符合情况:“简单的视图” -> 视图中仅含一张基表,无其它约束检查

    创建视图语句:

    CREATE OR REPLACE VIEW vw_stu_info AS 
    SELECT si.id,
           si.name,
           si.sex
      FROM stu_info SI;
    /
    

    测试语句:(可以理解为向 基表 中插入数据的情况)

    -- TRUNCATE TABLE stu_info; 清除历史数据,如果有
    
    INSERT INTO vw_stu_info (id, NAME, sex) VALUES (1, '瑶瑶', '女');
    
    SELECT * FROM vw_stu_info;
    

    测试结果:
    在这里插入图片描述

    个人理解:

    • 判断的依据:向视图中插入数据情况,可以转化为向基表中插入数据的情况,然后再考虑 dml 操作的可行性
    • 一般情况下,我们只会对视图进行查询,不做 dml 操作,所以此处了解即可。
    • 大致有下列情况(也许你见过别人说的其它情况,但一切要以自己实际动手的案例为主!)
    不符合的情况理解
    多个基表连接规定(扩展:可通过 instead of 触发器进行 dml 操作)
    存在虚拟列基表中没有,通过表达式,rowid、rownum 等计算得到的
    存在 not null 列不在视图中很好理解,若不是,则违反了基表的 非空约束

    3.3 with check option

    • 检查选项: 视图中进行 dml 操作时,必须要符合 where 的限制条件

    个人理解:

    1. 对于 insert,有 with check option 时,要保证 insert 后,数据能被视图查询出来(符合 where 条件) 
    2. 对于 update,有 with check option 时,要保证 update 后,数据能被视图查询出来(符合 where 条件)
    3. 对于 delete,有无 with check option 都一样
    4. 对于没有 where 子句的视图,使用 with check option 是多余的 
    

    基础数据:

    TRUNCATE TABLE stu_info; -- 清除历史数据
    
    INSERT INTO stu_info (id, NAME, sex) VALUES (1, '瑶瑶', '女');
    INSERT INTO stu_info (id, NAME, sex) VALUES (2, '倩倩', '女');
    INSERT INTO stu_info (id, NAME, sex) VALUES (3, '优优', '男');
    COMMIT;
    

    视图代码:

    CREATE OR REPLACE VIEW vw_stu_info AS (
     SELECT si.id,
            si.name,
            si.sex
       FROM stu_info SI
      WHERE si.id <= 5
    ) WITH CHECK OPTION;
    /
    

    测试语句:

    -- id = 6 > 5, 不符合视图中的 where 条件
    INSERT INTO vw_stu_info (id, NAME, sex) VALUES (6, '测试66', '男');
    

    测试结果:
    在这里插入图片描述

    3.4 with read only

    • 检查选项: 只读视图,禁止 dml 操作

    创建视图语句:

    CREATE OR REPLACE VIEW vw_stu_info AS (
     SELECT si.id,
            si.name,
            si.sex
       FROM stu_info SI
      WHERE si.id <= 5
    ) WITH READ ONLY;
    /
    

    测试语句:

    INSERT INTO vw_stu_info (id, NAME, sex) VALUES (6, '测试66', '男');
    

    测试结果:
    在这里插入图片描述

    展开全文
  • mybatis调用oracle视图

    千次阅读 2019-09-19 19:29:20
    多数据源切换调用oralce里的某个视图,后台报错:表或视图不存在 select * from table 最后在select 语句中加上前缀即可。 select * from zzzz.table
  • oracle视图和索引

    2021-01-21 14:36:10
    什么是视图【View】?  (1)视图是一种虚表  (2)视图建立在已有表的基础上, 视图赖以建立的这些表称为基表  (3)向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句  ...
  • 如何使用Oracle视图

    2019-04-05 22:38:10
    什么是视图呢?视图是一种虚表,是建立在已有表的基础上, 也可以称视图为存储起来的select语句。 创建视图: --在 create view语句中嵌入子查询 create view empview as S select employee_id,last_name,...
  • Oracle中向视图中插入数据的方法
  • Oracle视图(View)说明

    千次阅读 2019-03-09 23:08:49
    Oracle 视图(View) 说明https://blog.csdn.net/tianlesoftware/article/details/5530618版权声明: https://blog.csdn.net/tianlesoftware/article/details/5530618 一. 视图的定义 视图(view),也称虚表, 不...
  • mysql导出的视图sql: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `v_privilegelist` AS select `p`.`id` AS `id`,`p`.`name` AS `NAME`,`p`.`info` AS `info`,group_concat(`u`.`id`...
  • Oracle 视图创建自增ID

    2020-08-24 09:17:10
    select ROW_NUMBER() over (order by getdate()) as id
  • 业务需求: xm:张三 gh:C001 bm:财务部 要求在视图中显示格式: con:张三-C001-财务部 create or replace view v_tjb as (select t.xm,t.gh,t.bm,t.xm||'-'||t.gh||'-'||t.bm con from tjb t);
  • oracle视图迁移到mysql

    千次阅读 2019-07-05 11:37:00
    oracle视图迁移mysql(仅记录当前项目遇到的小问题和解决方案)涉及问题点:1、函数差异  oracle     mysql 判断空值:  nvl('字段',值)  ifnull('字段',值) 条件赋值:  decode()  case when then ...
  • oracle视图传参

    千次阅读 2018-12-28 16:36:07
    1、对要传的参数写set、get方法 create or replace package vm_param is function set_userid(user_ids varchar2) return varchar2;...3、将参数放到视图中, 4、查询视图时传入参数
  • 一天的数据量也就4000-5000条,但是取数据时很慢,通过sql2008通过oracle客户端访问oracle视图取数据 单从语句上看,日期写成between and是否好点? 用普通视图有个缺点,来源表里建的索引失去作用了,如果...
  • ORACLE视图错误处理

    千次阅读 2017-07-21 14:52:11
    Oracle视图非常强大的功能之一在于其可以创建一个带有错误的视图。比如说视图里的字段在基表里不存在,该视图仍然可以创建成功,但是非法的且无法执行。  所以在建立错误视图后执行就会报错:oracle错误分析:ora-...
  • oracle视图原理以及dml操作视图限制

    千次阅读 2017-07-07 18:10:10
    oracle视图实际上就是封装sql语句,对外提供一个别名,使用者不需要关心复杂的sql,视图执行之后会将执行的结果当做一个表来使用,相当于一个虚拟的表,如果想在视图上进行DML的操作,在创建时候有两个选项 ...
  • Oracle视图的授权

    千次阅读 2018-11-22 22:40:45
    需要登陆sysdba管理员模式 connect system/[password] as sysdba 链接成功后赋予用户创建视图的权限 grant create view to 用户名;
  • oracle视图中添加数据

    2017-11-07 08:09:02
    oracle添加数据,提示添加成功!没有报错,提交事务之后。 查询时没有数据,重新插入该条数据,则会报唯一约束的错误,到底是怎么回事?
  • ORACLE视图的创建方法

    千次阅读 2017-11-29 16:46:09
    视图是存储在数据字典的一条select语句。通过创建视图可以提取数据的逻辑上的的集合和组合。 视图分为: 简单视图和复杂视图 简单视图:只从单表中获取数据、不包含函数和数据组、可实现DML操作 复杂视图:从多...
  • Oracle视图的使用

    千次阅读 2019-04-10 19:00:19
    视图的创建 as 后的子查询可以是任意的SELECT语句,是否可以含有ORDER BY 子句和DISTINCT短语则取决于具体的实现 --建立信息系学生的视图(学号,姓名,年龄),视图名为is_student create view is_student as ...
  • Oracle视图的创建和使用

    千次阅读 2018-10-17 17:55:54
    视图其实是一张虚表,是基于已存在的基表创建,可以将视图理解为存储起来的 SELECT 语句。 视图的作用: 1、控制数据的访问 2、简化查询 3、避免访问重复数据 赋权 首先要有创建视图的权限,没有权限的可以...
  • oracle 视图(view)的使用

    万次阅读 2017-07-26 15:24:29
    Oracle对象教程:视图(View)创建使用,视图(View)实际上是一张或者多张表上的预定义查询,这些表称为基表。从视图中查询信息与从表中查询信息的方法完全相同。只需要简单的SELECT…FROM即可。视图具有以下优点: ...
  • Oracle 视图索引

    千次阅读 2018-02-06 20:55:07
    第五章 视图索引的操作5.1 视图的功能一个视图实际上就是封装了一条复杂的查询语句注:为了在当前用户模式中创建视图,要求数据库用户必须有create any view(创建任何视图)的权限。5.2 创建视图的语法create [or ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 154,088
精华内容 61,635
关键字:

oracle视图