Oracle学习(十):视图,索引,序列号,同义词

简介: 本文主要讲Oracle视图,索引,序列号,同义词

1.知识点:可以对照下面的录屏进行阅读


视图,序列,索引,同义词
SQL> --视图:虚表
SQL> --视图的优点:简化复杂查询,限制数据访问(银行用的多),提供数据的相互独立,同样的数据可以有不同的显示方式
SQL> --第一个视图: 员工号 姓名 月薪 年薪
SQL> create view view1
  2  as
  3  select empno,ename,sal,sal*12 annlsal from emp;
SQL> --如果显示没有权限,则需要授权,见下图1-1
SQL> --复杂视图
SQL>  create or replace view view2  --如果view2存在就替换,否则就创建
  2    as
  3    select empno,ename,sal,sal*12 annlsal,dname
  4    from emp e, dept d
  5    where e.deptno=d.deptno
  6    with read only;    --只读视图
SQL> --序列sequence
SQL> create sequence myseq;
SQL> --插入数据
SQL> insert into testseq values(myseq.NEXTVAL,'aaa');
SQL> --序列不连续:
SQL> --1. 内存,长度20
SQL> --2. 序列是一个公有对象
SQL> --3. rollback
SQL> --创建索引表
SQL> --create index myindex on emp(deptno);
SQL> --同义词,即为别名
SQL> --为hr.EMPLOYEES起别名
SQL> create SYNONYM  hremp for hr.EMPLOYEES;

image.png

图1-1给scott授权


2.在Sqlplus下实际执行的结果录屏


1SQL> host cls
SQL> --视图
SQL> --第一个视图: 员工号 姓名 月薪 年薪
SQL> create view view1
  2  as
  3  select empno,ename,sal,sal*12 annlsal from emp;
create view view1
            *
第 1 行出现错误: 
ORA-01031: 权限不足 
SQL> /
视图已创建。
SQL> desc view1
 名称                                                                                是否为空? 类型
 ----------------------------------------------------------------------------------- -------- --------------------------------------------------------
 EMPNO                                                                               NOT NULL NUMBER(4)
 ENAME                                                                                        VARCHAR2(10)
 SAL                                                                                          NUMBER(7,2)
 ANNLSAL                                                                                      NUMBER
SQL> select * from view1;
     EMPNO ENAME        SAL    ANNLSAL                                                                                                                
---------- ---------- ----- ----------                                                                                                                
      7369 SMITH        800       9600                                                                                                                
      7499 ALLEN       1600      19200                                                                                                                
      7521 WARD        1250      15000                                                                                                                
      7566 JONES       2975      35700                                                                                                                
      7654 MARTIN      1250      15000                                                                                                                
      7698 BLAKE       2850      34200                                                                                                                
      7782 CLARK       2450      29400                                                                                                                
      7788 SCOTT       3000      36000                                                                                                                
      7839 KING        5000      60000                                                                                                                
      7844 TURNER      1500      18000                                                                                                                
      7876 ADAMS       1100      13200                                                                                                                
     EMPNO ENAME        SAL    ANNLSAL                                                                                                                
---------- ---------- ----- ----------                                                                                                                
      7900 JAMES        950      11400                                                                                                                
      7902 FORD        3000      36000                                                                                                                
      7934 MILLER      1300      15600                                                                                                                
已选择14行。
SQL>     create view view2
  2      as
  3      select empno,ename,sal,sal*12 annlsal,dname
  4      from emp e, dept d
  5      where e.deptno=d.deptno;
视图已创建。
SQL> select * from view2;
     EMPNO ENAME        SAL    ANNLSAL DNAME                                                                                                          
---------- ---------- ----- ---------- --------------                                                                                                 
      7369 SMITH        800       9600 RESEARCH                                                                                                       
      7499 ALLEN       1600      19200 SALES                                                                                                          
      7521 WARD        1250      15000 SALES                                                                                                          
      7566 JONES       2975      35700 RESEARCH                                                                                                       
      7654 MARTIN      1250      15000 SALES                                                                                                          
      7698 BLAKE       2850      34200 SALES                                                                                                          
      7782 CLARK       2450      29400 ACCOUNTING                                                                                                     
      7788 SCOTT       3000      36000 RESEARCH                                                                                                       
      7839 KING        5000      60000 ACCOUNTING                                                                                                     
      7844 TURNER      1500      18000 SALES                                                                                                          
      7876 ADAMS       1100      13200 RESEARCH                                                                                                       
     EMPNO ENAME        SAL    ANNLSAL DNAME                                                                                                          
---------- ---------- ----- ---------- --------------                                                                                                 
      7900 JAMES        950      11400 SALES                                                                                                          
      7902 FORD        3000      36000 RESEARCH                                                                                                       
      7934 MILLER      1300      15600 ACCOUNTING                                                                                                     
已选择14行。
SQL>     create or replace view view2
  2      as
  3      select empno,ename,sal,sal*12 annlsal,dname
  4      from emp e, dept d
  5      where e.deptno=d.deptno
  6      with read only;
视图已创建。
SQL> host cls
SQL> --序列sequence
SQL> create sequence myseq;
序列已创建。
SQL> create table testseq
  2  (tid number,tname varchar2(20));
表已创建。
SQL> select myseq.CURRVAL  from dual;
select myseq.CURRVAL  from dual
       *
第 1 行出现错误: 
ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此会话中定义 
SQL> select myseq.NEXTVAL  from dual;
   NEXTVAL                                                                                                                                            
----------                                                                                                                                            
         1                                                                                                                                            
已选择 1 行。
SQL> /
   NEXTVAL                                                                                                                                            
----------                                                                                                                                            
         2                                                                                                                                            
已选择 1 行。
SQL> select myseq.CURRVAL  from dual;
   CURRVAL                                                                                                                                            
----------                                                                                                                                            
         2                                                                                                                                            
已选择 1 行。
SQL> insert into testseq values(myseq.NEXTVAL,'aaa');
已创建 1 行。
SQL> /
已创建 1 行。
SQL> /
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from testseq;
       TID TNAME                                                                                                                                      
---------- --------------------                                                                                                                       
         3 aaa                                                                                                                                        
         4 aaa                                                                                                                                        
         5 aaa                                                                                                                                        
已选择3行。
SQL> insert into testseq values(myseq.NEXTVAL,'aaa');
已创建 1 行。
SQL> /
已创建 1 行。
SQL> rollback;
回退已完成。
SQL> insert into testseq values(myseq.NEXTVAL,'aaa');
已创建 1 行。
SQL> select * from testseq;
       TID TNAME                                                                                                                                      
---------- --------------------                                                                                                                       
         3 aaa                                                                                                                                        
         4 aaa                                                                                                                                        
         5 aaa                                                                                                                                        
         8 aaa                                                                                                                                        
已选择4行。
SQL> /*
SQL> 序列不连续:
SQL> 1. 内存,长度20
SQL> 2. 序列是一个公有对象
SQL> 3. rollback序列不连续:
SQL> 1. 内存,长度20
SQL> 2. 序列是一个公有对象
SQL> 3. rollback
SQL> */
SQL> host cls
SQL> --同义词
SQL> show user
USER 为 "SCOTT"
SQL> select count(*) from hr.EMPLOYEES;
select count(*) from hr.EMPLOYEES
                        *
第 1 行出现错误: 
ORA-00942: 表或视图不存在 
SQL> /
  COUNT(*)                                                                                                                                            
----------                                                                                                                                            
       107                                                                                                                                            
已选择 1 行。
SQL> --为hr.EMPLOYEES起别名
SQL> create SYNONYM  hremp for hr.EMPLOYEES;
create SYNONYM  hremp for hr.EMPLOYEES
*
第 1 行出现错误: 
ORA-01031: 权限不足 <span style="white-space:pre">  </span>
SQL> /
同义词已创建。
SQL> select count(*) from hremp;
  COUNT(*)                                                                                                                                            
----------                                                                                                                                            
       107                                                                                                                                            
已选择 1 行。
SQL> spool off


相关文章
|
4天前
|
Oracle 关系型数据库 网络安全
Oracle 19c 安装教程学习
Oracle 19c 安装教程学习
24 2
|
14天前
|
Oracle 关系型数据库 数据库
oracle数据创建同义词
oracle数据创建同义词
38 0
|
2月前
|
SQL Oracle 关系型数据库
[oracle]使用impdp导入数据时卡在视图
[oracle]使用impdp导入数据时卡在视图
185 2
|
4月前
|
运维 DataWorks Oracle
DataWorks产品使用合集之在标准模式下,当同步Oracle的表或视图时,是否需要在源端的测试和生产环境中都存在要同步的表或视图
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
42 3
|
5月前
|
Oracle 关系型数据库 Java
Oracle 19c 查看隐含参数视图
Oracle 19c 查看隐含参数视图
93 7
|
5月前
|
存储 Oracle 关系型数据库
Oracle索引知识看这一篇就足够
Oracle索引知识看这一篇就足够
|
5月前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。
|
5月前
|
Oracle 关系型数据库 数据库
Oracle 11gR2学习之三(创建用户及表空间、修改字符集和Oracle开机启动)
Oracle 11gR2学习之三(创建用户及表空间、修改字符集和Oracle开机启动)
|
5月前
|
存储 Oracle 网络协议
Oracle 11gR2学习之二(创建数据库及OEM管理篇)
Oracle 11gR2学习之二(创建数据库及OEM管理篇)
|
5月前
|
Oracle 关系型数据库 数据库
Oracle 11gR2学习之一(安装篇)
Oracle 11gR2学习之一(安装篇)

推荐镜像

更多