精华内容
下载资源
问答
  • 在本教程中,您将学习如何使用Oracle RENAME语句重命名数据库中的表。要重命名表,可以使用以下Oracle RENAME表语句,如下所示:RENAME table_name TO new_name;在RENAME表语句中:首先,指定将要重命名的表名称。...

    在本教程中,您将学习如何使用Oracle RENAME语句重命名数据库中的表。

    要重命名表,可以使用以下Oracle RENAME表语句,如下所示:

    RENAME table_name TO new_name;

    在RENAME表语句中:

    首先,指定将要重命名的表名称。

    其次,指定新的表名。新名称不能与同一模式中的另一个表相同。

    请注意,一旦执行了RENAME语句,就不能回滚了。

    当重命名表时,Oracle自动将旧表上的索引,约束和授权转移到新表上。 另外,它使依赖重命名表(原表)的所有对象失效,如视图,存储过程,函数和同义词。

    Oracle RENAME表的例子

    我们来创建一个名为promotions表,用来作演示。

    CREATE TABLE promotions( promotion_id NUMBER GENERATED BY DEFAULT AS IDENTITY, promotion_name varchar2(255), start_date DATE NOT NULL, end_date DATE NOT NULL, PRIMARY KEY(promotion_id), CHECK (end_date > start_date) );

    以下PL/SQL函数通过查询promotions表中的数据来返回促销的数量:

    CREATE OR REPLACE FUNCTION count_promotions RETURN NUMBER IS v_count NUMBER; BEGIN SELECT COUNT( * ) INTO v_count FROM promotions; RETURN v_count; END;

    要将promotions表重命名为campaigns表,可以使用以下语句:

    RENAME promotions TO campaigns;

    如上面所述,Oracle将promotions表中的所有索引,约束和授权转移到campaigns表中。 以下语句显示了从promotions表传输的新campaigns表的限制条件:

    SELECT OBJECT_TYPE,OBJECT_NAME,status FROM all_objects WHERE status = 'INVALID' and OWNER='OT' ;

    因为COUNT_PROMOTIONS函数引用了promotions表,所以当重命名promotions表时,COUNT_PROMOTIONS函数变得无效。

    要查找当前模式中的无效对象,可以从all_objects视图中查询数据,如下所示:

    SELECT owner, object_type, object_name FROM all_objects WHERE status = 'INVALID' ORDER BY object_type, object_name;

    执行上面查询语句,得到以下结果 –

    50e4ff491c4a698a9d287a7b67128f45.png

    如上查询结果所示,该语句返回COUNT_PROMOTIONS函数作为无效的对象。

    在本教程中,您已学习如何使用Oracle RENAME表语句重命名数据库中的表。

    ¥ 我要打赏   纠错/补充 收藏

    展开全文
  • Oracle视图

    2020-01-16 15:50:40
    Oracle视图 文章目录Oracle视图视图定义视图的优缺点优点:缺点:视图的分类视图的创建**关系视图**内嵌视图对象视图*物化视图*简单视图的DML操作更改视图更改视图定义视图重新编译删除视图 参考博客: Oracle 视图 ...

    Oracle视图


    参考博客:

    Oracle 视图

    Oracle12C–对象视图(67)

    注:本博客使用 scott 账号练习,再次之前需要赋予 scott 账号创建 视图的权限(使用SYS用户赋权)。

    grant create view to scott;
    

    视图定义

    视图是一个虚拟表,其内容由查询定义,是基于Oracle语句查询出来的结果集的可视化的表。同真实的表一样,视图包含一系列带有名称的列和行数据,犹如一个真实的表,视图中的字段就是来自一个或多个数据库中的真实的表中的字段,俗称虚表。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

    对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,可以通过视图将这些服务器上相似结构的数据组合起来。

    视图的优缺点

    优点:

    1. 数据安全:对不同的用户定义不同的视图,使用户只能看到与自己有关的数据,同时,用户对视图,不可以随意的更改和删除。
    2. 聚焦数据: 视图提供了一种可以控制的方式, 即可以让不同的用户看见不同的列, 而不允许访问那些敏感的列, 这样就可以保证敏感数据不被用户看见;
    3. 简化查询:为复杂的查询建立一个视图,可以快速访问两表或多表连接所组成的数据。 可以把一些多表的数据组合在一块,可以快速读取用聚合函数返回的结果集。
    4. 逻辑数据独立性: 将程序与表通过视图分隔开来,在做复杂的查询逻辑时可以简化思考过程;
    5. 简化用户权限的管理:可以将视图的权限授予用户, 而不必将基表中某些列的权限授予用户, 这样就简化了用户权限的定义。
    6. 重定义列名:在表中有些列名定义没有代表意义,可以在组建视图时重命名列名。
    7. 可以合并分离的数据,创建分区视图 。当数据量大的时候,这时我们就可以使用union关键字, 将各分公司的数据合并为一个视图。
    8. 视图还可以用作跨表及跨域,在两台数据库之间做桥梁链接的作用.

    缺点:

    1. 性能:必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,也会把它变成一个复杂的结合体,需要花费一定的时间。
    2. 当用户试图修改试图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的试图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。
    3. 维护繁琐:在后期的维护上 数据库的表结构变了 也会影响视图的改变,维护繁琐。

    视图的分类

    数据库中的视图一共有四种:关系视图、内嵌视图、对象视图和物化视图

    关系视图:

    Oracle 视图是作为数据库对象存在的,因此,创建之后也可以通过工具或数据字典来查看视图的相关信息。这是大家常用的视图。

    内嵌视图:

    from 语句中的可以把表改成一个子查询,如:select a.id ,b.id from emp a,(select id from dept) b where a.id=b.id 内嵌视图不属于任何用户,也不是对象,内嵌视图是子查询的一种,可以与数据表、视图一样作为查询语句的数据源存在,但在形式上有较大的区别,内嵌视图不必使用 create view 命令进行创建,因此,在数据字典中也无法获得相应信息。内嵌视图的特点在于无须创建真正的数据库对象,而只是封装查询,因此会节约数据库资源,同时不会增加维护成本。但是内嵌视图不具有可复用性,因此当预期将在多处调用到同一查询定义时,还是应该使用关系视图

    对象视图:

    对象类型在数据库编程中有许多好处,但有时,应用程序已经开发完成。为了迎合对象类型而重建数据表是不现实的。对象视图正是解决这一问题的优秀策略。对象视图创建之后,同样可以在数据字典中获得其相应信息。利用 Oracle 内置视图 user_views 可以获得对象视图相关信息。Oracle 中的对象数据实际仍然以关系数据的形式存储。但是,对象的特性,例如继承、封装等,都为开发人员提供了更加灵活的处理形式。同样,可以构造复杂的对象类型来封装复杂的多表查询。

    物化视图:

    常用于数据库的容灾,不是传统意义上虚拟视图,是实体化视图,和表一样可以存储数据、查询数据。主备数据库数据同步通过物化视图实现,主备数据库通过 data link 连接,在主备数据库物化视图进行数据复制。当主数据库垮掉时,备数据库接管,实现容灾。

    视图的创建

    权限: 要在当前用户中创建视图, 用户必须具有 create view 系统权限;要在其他用户中创建视图,用户必须具有 create any view 系统权限. 视图的功能取决于视图拥有者的权限

    关系视图

    create [ or replace ] [ force ] view [schema.]view_name
                          [ (column1,column2,...) ]
                          as 
                          select ...
                          [ with check option ] [ constraint constraint_name ]
                          [ with read only ];
    

    解析:

    1. or replace: 如果存在同名的视图,则使用新视图"替代"已有的视图;
    2. force: 强制创建视图,不考虑基表是否存在,也不考虑是否具有使用基表的权限(当基表出现问题时不能创建视图,通过这个关键字可以强制创建);
    3. column1,column2,。。。: 视图的列名,列名的个数必须与select查询中列的个数相同; 如果select查询包含函数或表达式,则必须为其定义列名。此时,既可以用column1,column2指定列名,也可以在select查询中指定列名。
    4. with check option: 指定对视图执行的 DML 操作必须满足视图子查询的条件即,对通过视图进行的增删改操作进行检查,要求增删改操作的数据,必须是 select 查询所能查询到的数据,否则不允许操作并返回错误提示。 默认情况下,在增删改之前"并不会检查"这些行是否能被 select 查询检索到。
    5. **with read only:**创建的视图只能用于查询数据,而不能用于更改数据。

    举例:

    创建简单视图 :是指基于单个表建立的,不包含任何函数、表达式和分组数据的视图。

    create or replace view vw_emp 
    as SELECT EMPNO, ENAME, JOB, HIREDATE, DEPTNO FROM EMP;
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jD6FCzQP-1579160900007)(D:\学习资料\个人总结文件\保存图片\视图\01创建简单视图.png)]

    创建只读视图: 只能查询,无法进行更改,如果基表有更新,只读视图也发生了相应的更改。

     create view vw_emp_readonly 
     as select empno,ename,job,hiredate,deptno from emp 
     with read only;
    

    如果尝试对视图的数据进行修改,则会报错:ORA-42399: cannot perform a DML operation on a read-only view

    与简单视图类似,所以不做演示。

    创建检查约束视图 with check option: 对通过视图进行的增删改操作进行检查,要求增删改操作的数据必须是select查询所能查询到的数据

    create view vw_emp_check 
    as select empno,ename,job,hiredate,deptno from emp 
       where deptno = 10 
    with check option;
    

    这里插入的数据如果部门编号不是10 ,则会报错:ORA-01402: view WITH CHECK OPTION where-clause violation

    与简单视图类似,所以不做演示。

    连接视图: 是指基于多个表所创建的视图,即,定义视图的查询是一个连接查询。 主要目的是为了简化连接查询。

    create view vw_dept_emp
    as select a.deptno,a.dname,a.loc,b.empno,b.ename,b.sal 
       from   dept a,emp b 
       where  a.deptno=b.deptno 
       and    a.deptno in (10,30);
    

    在视图上进行的所有DML操作,最终都会在基表上完成;select 视图没有什么限制,但insert/delete/update有一些限制;常见的DML报错为:ORA-01779: cannot modify a column which maps to a non key-preserved table。

    与简单视图类似,所以不做演示,不过注意:

    1. 如果连接视图中的一个**基表的键(主键、唯一键)**在它的视图中仍然存在,并且“基表的键”仍然是“连接视图中的键”(主键、唯一键);即,某列在基表中是主键|唯一键,在视图中仍然是主键|唯一键,则称这个基表为“键值保存表”。
      一般地,由主外键关系的2个表组成的连接视图,外键表就是键值保存表,而主键表不是。

    连接视图的更新准则

    1. 一般准则
      • 任何DML操作,只能对视图中的键值保存表进行更新, 即,“不能通过连接视图修 改多个基表”。
      • 在DML操作中,“只能使用连接视图定义过的列”。
      • 自连接视图”的所有列都是可更新(增删改)的。
    2. insert准则
      • 在insert语句中不能使用“非键值保存表”中的列(包括“连接列”);
      • 执行insert操作的视图,至少应该“包含”键值保存表中所有设置了约束的列;
      • 如果在定义连接视图时使用了WITH CHECK OPTION 选项,则“不能”针对连接视 图执行insert操作
    3. update准则
      • 键值保存表中的列是可以更新的;
      • 如果在定义连接视图时使用了WITH CHECK OPTION 选项,则连接视图中的连接列(一般就是“共有列”)和基表中的“其他共有列”是“不可”更新的,连接列和共有列之外的 其他列是“可以”更新的
    4. delete准则
      • 如果在定义连接视图时使用了WITH CHECK OPTION 选项,依然“可以”针对连接视图执行delete操作

    3.2.6 可更新连接视图

    如果创建连接视图的select查询“不包含”如下结构,并且遵守连接视图的“更新准则”,则这样的连接视图是“可更新”的:

    1. 集合运算符 (union,intersect,minus)
    2. DISTINCT 关键字
    3. GROUP BY,ORDER BY,CONNECT BYSTART WITH 子句
    4. 子查询
    5. 分组函数
    6. 需要更新的列不是由“列表达式”定义的
    7. 基表中所有 NOT NULL 列均属于该视图

    内嵌视图

    内嵌视图就是类似子查询,所以这里不在描述。

    对象视图*

    如果需要将一张数据表中的数据转换为对象的形式操作,就可以利用对象视图来完成。利用对象视图,可以将指定视图查询语句的数据按照顺序填充到相应对象的属性中,这样就可以在操作视图时直接将数据以对象的形式返回。

    创建对象视图前需要创建存储数据格式的对象类。这部分这里不加描述,有时间再说。

    当创建好对象类之后就可以创建对应的对象视图。

    CREATE OR REPLACE VIEW 视图名称 OFWITH OBJECT IDENTIFIER(主键对象)
    AS 子查询;
    

    解析:

    1. OF语句: 表示数据要转换为对象的所属类,
    2. WITH OBJECT IDENTIFIER: 表示要设置一个对象标识符(OID),对象标识符的主要功能是使用一个个标记来唯一地标记一个对象,当创建完是对象视图后,Oracle会自动产生一个OID。

    举例:

    创建一个获取 emp表 的对象视图。

    -- 1.先创建一个对象类 
    CREATE OR REPLACE TYPE EMP_TABLE_OBJECT AS OBJECT
    (
      ATRI_EMPNO    NUMBER(4),
      ATRI_ENAME    VARCHAR2(10),
      ATRI_JOB      VARCHAR2(9),
      ATRI_MGR      NUMBER(4),
      ATRI_HIREDATE DATE,
      ATRI_SAL      NUMBER(7, 2),
      ATRI_COMM     NUMBER(7, 2),
      ATRI_DEPTNO   NUMBER(2),
      MEMBER FUNCTION TOSTRING RETURN VARCHAR2
    )
    NOT FINAL;
    /
    
    CREATE OR REPLACE TYPE BODY EMP_TABLE_OBJECT AS
      MEMBER FUNCTION TOSTRING RETURN VARCHAR2 AS
      BEGIN
        RETURN '雇员编号:' || SELF.ATRI_EMPNO || ',姓名:' || SELF.ATRI_ENAME || ',职位:' || SELF.ATRI_JOB || ',雇佣日期:' || SELF.ATRI_HIREDATE || ',工资:' || SELF.ATRI_SAL || ',佣金:' || SELF.ATRI_COMM;
      END;
    END;
    /
    

    第一步中emp_table_object类中定义的属性与 emp 表中一样,这样就可以将 emp 表中的数据通过对象视图转变为 emp_table_object 类的对象。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sN1dFr2e-1579160900008)(D:\学习资料\个人总结文件\保存图片\视图\02创建对象类.png)]

    -- 2.创建相关的对象视图
    CREATE OR REPLACE VIEW v_myview OF emp_table_object
    WITH OBJECT IDENTIFIER(ATRI_EMPNO) AS
    SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP;
    

    第二步将emp表中的全部数据通过对象视图转变为 emp_table_object 类的对象,这样在进行程序编写时,只需要通过对象视图就可以取得相应对象。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y5DARkCI-1579160900009)(D:\学习资料\个人总结文件\保存图片\视图\03创建对象视图.png)]

    ![04测试对象视图](D:\学习资料\个人总结文件\保存图片\视图\04测试对象视图.png)-- 3.测试创建好的对象类
    DECLARE
      V_EMP EMP_TABLE_OBJECT;
    BEGIN
      SELECT VALUE(EV) INTO V_EMP FROM V_MYVIEW EV WHERE ATRI_EMPNO = 7839;
      DBMS_OUTPUT.PUT_LINE(V_EMP.TOSTRING());
    END;
    /
    

    这里的程序块直接查询了对象视图,这样就会将7839雇员的信息以对象的方式返回,直接输出时,就可以调用tostring()函数取得相应的数据。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-93zIvGr6-1579160900009)(D:\学习资料\个人总结文件\保存图片\视图\04测试对象视图.png)]

    物化视图*

    物化视图查了资料,感觉内容还是挺多的,之后再整理下。

    create materialized view [view_name] 
    build [immediate|deferred]
    refresh [fast|complete|force] 
    [ 
    	on [commit|demand] | 
    	start with (start_time) next (next_time) 
    ] 
     [enable | disable] query rewrite
    as 
    	{创建物化视图用的查询语句} 
    

    解析:

    1. build [immediate|deferred]: 创建方式(BuildMethods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。

      • BUILD IMMEDIATE: 是在创建物化视图的时候就生成数据。

      • BUILD DEFERRED: 则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE

    2. refresh [fast|complete|force]: 视图刷新的方式:

      • fast: 增量刷新.假设前一次刷新的时间为t1,那么使用fast模式刷新物化视图时,只向视图中添加t1到当前时间段内,主表变化过的数据.为了记录这种变化,建立增量刷新物化视图还需要一个物化视图日志表。create materialized view log on(主表名)。
      • complete: 全部刷新。相当于重新执行一次创建视图的查询语句。
      • force: 这是默认的数据刷新方式。当可以使用 fast 模式时,数据刷新将采用 fast 方式;否则使用complete 方式。
    3. MV数据刷新的时间:

      • on demand: 在用户需要刷新的时候刷新,这里就要求用户自己动手去刷新数据了(也可以使用job定时刷新)
      • on commit: 当主表中有数据提交的时候,立即刷新MV中的数据;
        **start ……:**从指定的时间开始,每隔一段时间(由next指定)就刷新一次。
    4. 查询重写(QueryRewrite): 包括ENABLE QUERY REWRITEDISABLE QUERY REWRITE两种。

      分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE

    举例:

    Oracle 的物化视图的快速刷新要求必须建立物化视图日志,通过物化视图日志可以实现增量刷新功能。但是我们这边只是创建视图来查询,没有刷新,所以没有去创建物理日志表。

    CREATE MATERIALIZED VIEW VM_EMP
    DISABLE QUERY REWRITE
    AS SELECT * FROM EMP;
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CrkLXflT-1579160900010)(D:\学习资料\个人总结文件\保存图片\视图\05创建物化视图.png)]

    简单视图的DML操作

    -- insert
    INSERT INTO VW_EMP VALUES(7322,'JORE','KING',TO_DATE('2020-01-16','YYYY-MM-DD'),10);
    INSERT INTO VW_EMP VALUES(7828,'PETE','KING',TO_DATE('2020-01-16','YYYY-MM-DD'),20);
    -- update
    UPDATE VW_EMP SET DEPTNO = 20 WHERE ENAME = 'JORE';
    -- delete
    DELETE VW_EMP WHERE ENAME = 'PETE';
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kmv81AzZ-1579160900010)(D:\学习资料\个人总结文件\保存图片\视图\06简单视图DML操作.png)]

    更改视图

    在对视图进行更改(或重定义)之前,需要考虑如下几个问题:

    1. 由于视图只是一个虚表,其中没有数据,所以更改视图只是改变数据字典中对该视图的定义信息,视图的所有基础对象都不会受到任何影响。
    2. 更改视图之后,依赖于该视图的所有视图和PL/SQL程序都将变为INVALID(失效)状态
    3. 如果以前的视图中具有with check option选项,但是重定义时没有使用该选项,则以前的此选项将自动删除。

    更改视图定义

    执行create or replace view语句。这种方法代替了先删除(“权限也将随之删除”)后创建的方法,会保留视图上的权限,但与该视图相关的存储过程和视图会失效。

    -- 举例:将VW_EMP修改为只读
    create or replace view vw_emp 
    as SELECT EMPNO, ENAME, JOB, HIREDATE, DEPTNO FROM EMP
    with read only;
    

    视图重新编译

    语法: alter view 视图名 compile;
    **作用:**当视图依赖的基表改变后,视图会“失效”。为了确保这种改变“不影响”视图和依赖于该视图的其他对象,应该使用 alter view 语句“明确的重新编译”该视图,从而在运行视图前发现重新编译的错误。视图被重新编译后,若发现错误,则依赖该视图的对象也会失效;若没有错误,视图会变为“有效”。
    **权限:**为了重新编译其他模式中的视图,必须拥有 alter any table 系统权限。
    **注意:**当访问基表改变后的视图时,oracle会“自动重新编译”这些视图。

    alter view vw_emp compile;
    

    删除视图

    可以删除当前模式中的任何视图;
    如果要删除其他模式中的视图,必须拥有DROP ANY VIEW系统权限;
    视图被删除后,该视图的定义会从词典中被删除,并且在该视图上授予的“权限”也将被删除。
    视图被删除后,其他引用该视图的视图及存储过程等都会失效。

    drop view vw_emp;  -- 删除普通视图
    drop materialized view vm_emp;  -- 删除物化视图
    
    展开全文
  • Oracle 视图

    2020-01-11 18:11:58
    1查询语句特别复杂,可以使用视图,将查询好的数据放到视图中 2安全性 高, 使用视图进行查询 创建用户的时候 给用户一个查看视图的权限,和连接的权限,(聚合函数要命名成别名 必须)到时候用户只能查看这个视图 ...

    视图

    使用视图的好处
    1查询语句特别复杂,可以使用视图,将查询好的数据放到视图中
    2安全性 高, 使用视图进行查询 创建用户的时候 给用户一个查看视图的权限,和连接的权限,(聚合函数要命名成别名 必须)到时候用户只能查看这个视图
    视图的好处,可以主要分为四点:
      第一点:使用视图,可以定制用户数据,聚焦特定的数据。
      在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没有任何意义,我们可以根据这一实际情况,专门为采购人员创建一个视图,以后他在查询数据时,只需select * from view_caigou 就可以啦。
      第二点:使用视图,可以简化数据操作。
      解释:我们在使用查询时,在很多时候我们要使用聚合函数,同时还要显示其它字段的信息,可能还会需要关联到其它表,这时写的语句可能会很长,如果这个动作频繁发生的话,我们可以创建视图,这以后,我们只需要select * from view1就可以啦~,是不是很方便呀~
      第三点:使用视图,基表中的数据就有了一定的安全性
      因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,可以不通过视图给用户,视图是动态的数据的集合,数据是随着基表的更新而更新。同时,用户对视图,不可以随意的更改和删除,可以保证数据的安全性。
      第四点:可以合并分离的数据,创建分区视图
      随着社会的发展,公司的业务量的不断的扩大,一个大公司,下属都设有很多的分公司,为了管理方便,我们需要统一表的结构,定期查看各公司业务情况,而分别看各个公司的数据很不方便,没有很好的可比性,如果将这些数据合并为一个表格里,就方便多啦,这时我们就可以使用union关键字,将各分公司的数据合并为一个视图。
      以上,就是我认为视图的作用,实际上很多公司都使用视图来查询数据的;
    我认为有些场景不太适合使用视图,比如在java中调用视图进行查询数据,如果要查询的数据为多层子查询,视图是将所有的数据查询出来再去进行where 判断这样效率低,要在最靠前的地方进行where筛选提高效率。

    ----为什么不把数据放到 world 中 因为数据会发生改变
    ---视图安全性的使用
    --system用户中   给用户连接的权限  最小的权限只能用来连接
    create user ppp identified by ppp;
    grant connect to ppp;
    --scott中创建视图	
    create view dept_no as 
    select deptno,max(sal) as hh  --聚合函数 使用视图要命名
    from emp group by deptno;
    --在scott中给ppp用户赋  视图的权限
    grant select on DEPT_NO to PPP;
    --然后在 用户中查看视图
    --将数据卖给别人,使用视图可以将数据库的列进行重命名,提高安全性
    select * from scott.dept_no
    --删除视图
    drop view view_empno1
    --视图(view):直接理解,即将一条select语句起个名保存在数据库中
    --对于视图的使用就和表一样(只不过不能 进行DML操作)
    select * from view_empno1
    
    展开全文
  • 一、 视图是基于表的表或者视图的逻辑表,与储存数据的表一样都是Oracle的方案对象。 视图通常用于下面: 1、通过提供用户所需要的的基表中的数据,可以简化用户对数据的理解,隐藏表结构的复杂性,而且可以将那些...

    一、 视图是基于表的表或者视图的逻辑表,与储存数据的表一样都是Oracle的方案对象。
    视图通常用于下面:
    1、通过提供用户所需要的的基表中的数据,可以简化用户对数据的理解,隐藏表结构的复杂性,而且可以将那些经常使用的使用的查询定义为视图,使用户不必为以后的每次操作指定全部的条件。
    2、通过限制对一组预定义的表行或者表列的访问你,可以提供更好的安全性级别。通过Oracle的预授权命令作用于视图,可以让全县被限制在基于的行或列的子集上,提供高细的安全性级别。
    3、可以提供不同于基表的角度来呈现视图的数据,了如重命名视图的列,而不会印象到视图所基于的表。
    4、隔离应用程序对基表的更改,对数据的更改有时候并不会影响都视图。
    二、 视图的分类:
    1、标准视图,使用CREATE VIEW 语句创建的存储的的查询,这类视图创建后会保存到数据字典中,并且作为一个方案对象存在。
    2、内嵌视图,在SQL查询语句中直接包含一个子查询,比如在SELECT 语句中包含其他的SELECT 字句,实际上创建了内嵌视图。这种视图只在查询存在,不会保存到数据字典中。
    3、对象视图,使用对象试图可以将标准的表或者视图转换为对象类型的视图,可以迎合对象类型的查询而不用重建数据表,使得既可以利用对象编程,又可以使用到传统关系型数据查询的优势。对象视图创建后也会在数据字典中保存特性。对象数据实际上仍然以关系数据的形式储存,但是利用对象的封装行、继承等特性,可以为开发人员提供灵活的处理方式。
    4、物化视图,这种视图会真实地储存数据,它与标准视图仅储存查询语句大不相同,无话视图是查询结果被提前储存或“物化”的方案对象,它主要用来汇总、计算、复制和分发数据。
    三、视图创建的语法

    CREATE [OR REPLACE] [FORCE | NOFORCE | ] VIEW view 
    [ (alias [, alias] ...) ]
    AS subquery
    [ WITH CHECK OPTION [ CONSTRAINT constraint ] ]
    [ WITH READ ONLY [ CONSTRAINT constraint ] ];
    

    OR REPLACE, 如果视图已经存在,重建创建它。
    FORCE ,强制创建视图,二不管基表是否存在。
    NOFORCE ,只在基表存在的情况下创建视图(这是默认值)。
    view,指定视图的名字。
    alias,为由视图查询选择的表达式指定名字(别名的个数必须与由视图SELECT选择的列的个数匹配)。
    subquery,是一个完整的SELECT语句(对于在SELECT 列表中的字段可以用别名)。
    WITH CHECK OPTION,指定只有可访问的列才能在视图中被插入或者修改。
    constraint ,为CHECK OPTION约束指定的名字。
    WITH READ ONLY,只读视图,确保在该视图中没有DML操作能被执行。

    四、创建简单的视图

    --创建视图
    CREATE OR REPLACE VIEW v_buser
            AS
            SELECT id 编号, account 账号, email 邮箱, mobile 电话, name 姓名, sex  性别, birth 生日
                    FROM buser;
    --查询视图
    SELECT * FROM v_buser;
    

    在这里插入图片描述

    --也可以这样建view
    CREATE OR REPLACE VIEW v_buser(
    	编号,
    	账号,
    	邮箱,
    	电话,
    	姓名,
    	性别,
    	生日
    )
    	AS 
    	SELECT id, account, email ,mobile ,name ,sex  ,birth 
    		FROM buser;
    

    向视图中插入数据,基表是单表的视图可以插入数据,但是注意视图如果只有基表的几个列,没有包含基表中的唯一索引、主键、非空的列,是不能插入数据的。在向视图插入记录,实际是向表插入数据。如果基表被删除,基于基表建立的视图也会不能查询,会提示错误
    ORA-04063: view “TEST.V_BUSER” has errors 。
    五、使用WITH CHECK OPTION创建视图

    CREATE OR REPLACE VIEW v_buser1
    		AS 
    		SELECT a.id 编号, a.account 帐号,a.email 邮箱, a.mobile 电话, a.name 姓名, a.sex  性别, a.time 时间, a.status 状态
    				FROM buser a
    		WITH CHECK OPTION CONSTRAINT v_buser1;
    

    向这个视图插入数据会提示错误

    六、创建复杂视图
    创建俩个基表以上的视图

    CREATE OR REPLACE VIEW v_buser
    		AS 
    		SELECT a.id 编号, a.account 帐号,a.email 邮箱, a.mobile 电话, a.name 姓名, a.sex  性别, b.zhye 余额, a.time 时间, a.status 状态
    				FROM buser a, bzhye b
    				WHERE a.id = b.id;
    

    向基于俩个基表以上建立视图插入记录条件比较苛刻,如果插入不可行,一般会提示错误 ORA-01776: cannot modify more than one base table through a join view。
    当复杂视图涉及多个基表是,其中至少有一个表的所有列都包含在视图中,或者一个表的的主键和不允许为空的列都包含在视图中,同事创建视图的CREATE VIEW 语句SELECT 语句中只是用了WHERE 子句不包含分组,子查询或DISTINCT关键字,这样的视图可以进行DML操作的,。相反,如果视图中的列是有基表经过运算或分组,比如使用表达式、AVG函数或DISTINCT、GROUP BY 等子句组成的,则无法进行DML操作。

    --查询视图是否可以更行
    SELECT * FROM user_updatable_columns WHERE table_name = '视图名';
    

    在Oracle中,要能对复杂的联接视图进行更新修改,必须要遵循一定的条件,这些条件概述如下所示:
    (1)所有的插入、更新和删除草做在同一时刻只能修改视图中的一个基表。
    (2)所有课更新的列必须为键保留表中列,如果视图使用WITH CHECK OPTION进行了定义,name所有的联接列和重复列都不能被更新。
    (3)只要存在一个键保留表,就能够删除视图中的列,建保留表在FROM 子句中可以重复,如果视图使用WITH CHECK OPTION定义并且键保留表被重复,那么不能从视图中删除行。
    (4)在执行插入操作时,只能对保留键表中的列进行插入,如果使用WITH CHECK OPTION进行定义的视图,则不允许进行插入操作。

    展开全文
  • oracle常用sql语句函数

    2019-08-15 09:47:52
    oracle常用sql语句函数 sql执行顺序 •FROM •WHERE •GROUP BY •HAVING •SELECT •DISTINCT •UNION •ORDER BY 一、Oracle数据库操作 1、创建数据库 create database databasename 2、删除数据库 drop database...
  • ORACLE SQL查询语句

    2019-04-08 08:58:51
    ORACLE SQL查询语句 SQL语句分为以下三种类型: DML:Data Manipulation Language 数据操纵语言 DDL:Data Definition Language 数据定义语言 DCL:Data Control Language 数据控制语言 DML:用于查询与修改数据记录...
  • ORACLE常用SQL语句大全

    2019-07-13 16:21:22
    ORACLE常用SQL语句大全 DDL:数据库定义语言(CREATE、ALTER、DROP、TRUNCATE、COMMENT、RENAME),用来创建数据库中的表、索引、视图、存储过程、触发器等对象的语句。 数据库操作: 数据表操作 创建表: ...
  • 根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合,它存储了要执行检索的查询语句的定义,以便在引用该视图时使用。 使用视图的优点:  1.简化数据操作:视图可以简化...
  • oracle常用sql语句

    万次阅读 热门讨论 2016-08-09 08:53:35
    -- 首先,以超级管理员的身份登录oracle  sqlplus sys/bjsxt as sysdba    --然后,解除对scott用户的锁  alter user scott account unlock;  --那么这个用户名就能使用了。  --(默认全局数据库名orcl) ...
  • Oracle视图、索引、序列

    千次阅读 2018-04-04 11:35:11
    但是,视图并不在数据库中存储数据值,其数据值来自定义视图的查询语句所引用的表,数据库只在字典中存储视图的定义信息。 通过视图修改数据时,实际上就是在修改基本表中的数据。与之相对应,改变基本表中的数据也...
  • 一、Oracle数据库操作 1、创建数据库 create databasedatabasename 2、删除数据库 drop databasedbname 3、备份数据库 完全备份 expdemo/demo@orclbuffer=1024file=d:\back.dmpfull=y demo:用户名、...
  • oracle常用SQL语句

    2011-03-25 16:05:00
    超详细的SQL语句语法 收藏 --在论坛上看到的谢谢该网友比较常用的SQL语句语法(Oracle)一.数据控制语句 (DML) 部分1.Insert (往数据表里插入记录的语句)Insert INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2,...
  • Oracle常用操作语句

    2020-09-08 22:29:55
    一、Oracle数据库操作 1、创建数据库create database databasename2、删除数据库drop database dbname3、备份数据库完全备份 exp demo/demo@orcl buffer=1024 file=d:\back.dmp full=y demo:用户名、密码 buffer: ...
  • oracle 常用sql语句

    千次阅读 2017-09-24 20:08:21
    -- 首先,以超级管理员的身份登录oracle  sqlplus sys/bjsxt as sysdba    --然后,解除对scott用户的锁  alter user scott account unlock;  --那么这个用户名就能使用了。  --(默认全局数据库名orcl) ...
  • ORACLE基本操作语句

    万次阅读 2016-08-12 16:55:49
    ORACLE 数据库       1.简单的表操作   创建一个简单的表 create table student( name varchar2(20), age number(3) );   插入新记录 insert into student values('Tom', 18); insert into ...
  • 重命名物化视图

    2016-07-14 15:26:23
    create MATERIALIZED VIEW mv1 as select * from a; --原物化视图创建语句 DROP MATERIALIZED VIEW mv1 PRESERVE TABLE; --检查...
  • oracle数据库常用语句

    2012-08-17 14:32:58
    唯一索引:唯一索引确保在定义索引的列中没有重复值,Oracle 自动在表的主键列上创建唯一索引。 组合索引:组合索引是在表的多个列上创建的索引 反向键索引:反转索引列键值的每个字节,另外还有位图索引、...
  • oracle sql语句大全

    千次阅读 多人点赞 2019-08-06 17:16:54
    oracle常用sql语句函数 sql执行顺序 •FROM •WHERE •GROUP BY •HAVING •SELECT •DISTINCT •UNION •ORDER BY 一、Oracle数据库操作 1、创建数据库 create database databasename 2、删除数据库 ...
  • oracle数据库SQL语句详解

    千次阅读 2015-08-18 11:40:34
    --使用RENAME语句对表进行重命名--- rename userInfo to userInfo1; rename userInfo1 to userInfo; --给表或列添加备注,可以帮助用户理解表或列的作用--- comment on table userInfo is '用户信息表...
  • (3)重命名索引 (4)删除索引 八、视图 视图是一个虚表,不占用物理空间,因为视图本身的定义语句存储在数据字典里,视图中的数据是一个或多个实际表中获得的。那些用于产生视图的表叫做该视图的基表。一个视图也可以...
  • oracle DBA常用语句

    2014-07-18 13:44:23
    'Action Code #' || to_char(command) ) action, p.program oracle_process,  status session_status, s.terminal terminal, s.program program,  s.username user_name, s.fixed_table_sequence activity_...
  • oracle常用建表语句

    2014-08-05 10:44:02
    --给表重命名 RENAME emp_new TO emp_new_test; --对表进行修改 ALTER TABLE department  --为表添加字段 ALTER TABLE department ADD(info VARCHAR2(400)); --修改表中的字段 ALTER TABLE ...
  • oracle数据库基本语句一、Oracle数据库操作1、创建数据库create database databasename2、删除数据库drop database dbname3、备份数据库完全备份exp demo/demo@orcl buffer=1024 file=d:\back.dmp full=ydemo:...
  • Oracle内建数据类型  一、 字符数据  1、 char(size)  2、 varchar2(size) 最常用,最大长度4000字节  3、 nvhar(size)、nvarchar(size)  4、 varchar(size) 5、 long 建议使用LOB大型数据  6、 raw ...
  • oracle 视图 物化视图 序列 同义词 索引
  • 终于把Oracle的基础学完了,记录一下Oracle的基础练习。 1.显示出表employees中的全部job_id(不能重复) select distinct job_id from employees; 2.显示出表employees的全部列,各个列之间用逗号连接,列头...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,173
精华内容 2,869
关键字:

oracle视图重命名语句