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;

图1-1给scott授权

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

SQL> 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

Oracle学习(十):视图,索引,序列号,同义词,布布扣,bubuko.com

时间: 2024-10-23 18:43:12

Oracle学习(十):视图,索引,序列号,同义词的相关文章

Oracle学习(十五):分布式数据库

--分布式数据库的独立性:分布数据的独立性指用户不必关心数据如何分割和存储,只需关心他需要什么数据. --本地操作 SQL> sqlplus scott/tiger --远程操作 SQL> sqlplus scott/[email protected]:1521/orcl --分布式操作 SQL> --创建数据库链路l2(需要权限): SQL> --remoteorcl服务命名(在net manager里配置):配置跟远程服务器的数据库的连接协议.主机名(ip地址).端口号等 SQ

Oracle学习(十四):管理用户安全

--用户(user) SQL> --创建名叫 grace 密码是password 的用户,新用户没有任何权限 SQL> create user grace identified by password; 验证用户: 密码验证方式(用户名/密码) 外部验证方式(主机认证,即通过登陆的用户名) 全局验证方式(其他方式:生物认证方式.token方式) 优先级顺序:外部验证>密码验证 --权限(privilege) 用户权限有两种: System:允许用户执行对于数据库的特定行为,例如:创建表.

oracle学习 十 数据库的语句优化(持续更)

平时关注Oracle数据库的网友都知道,Oracle性能优化保证了Oracle数据库的健壮性.下面就此提出需要注意的两个原则. 原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. 尤其是“主键ID=?”这样的条件. 原则二: SELECT子句中避免使用 ‘ * ‘: ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这

Oracle学习(十二):存储过程/存储函数

1.知识点 --第一个存储过程 /* 打印Hello World create [or replace] PROCEDURE 过程名(參数列表) AS PLSQL子程序体: 调用存储过程: 1. exec sayHelloWorld(); 2. begin sayHelloWorld(); sayHelloWorld(); end; / */ create or replace procedure sayHelloWorld<span style="white-space:pre"

Oracle学习(十四):管理用户安全性

--用户(user) SQL> --创建一个名为 grace password是password 的用户,新用户没有不论什么权限 SQL> create user grace identified by password; 验证用户: password验证方式(username/password) 外部验证方式(主机认证,即通过登陆的username) 全局验证方式(其它方式:生物认证方式.token方式) 优先级顺序:外部验证>password验证 --权限(privilege) 用户

Oracle组函数、多表查询、集合运算、数据库对象(序列、视图、约束、索引、同义词)等

count组函数:(过滤掉空的字段) select count(address),count(*) from b_user max() avg() min(),sum() select sum(age),max(age),min(age),avg(nvl(age,0)) from b_user 1       260     70      10      37.1428571428571 group by:如果前面定义了该字段名  则groupby必须也写上该字段 select name,pw

oracle学习篇十二:索引

索引: 查询User_indexes可以获取有关用户已创建的索引的详细信息. 查询User_ind_partitions可以获取有关用户已创建的分区索引的详细信息. 查询User_ind_columns可以获取有关列(用户的索引是基于这些列创建的)的详细信息. 索引类型:唯一索引.组合索引.反向键索引.位图索引和基于函数的索引. 索引在逻辑上物理上都独立于关联表中的数据,在任何时候都可以创建或删除索引,而不会影响基表或其它索引. 1.创建普通索引的语法:Create INDEX index_na

oracle sql 基础(五):数据定义语言(创建和管理序列、索引、同义词)

许多应用程序要求使用唯一的数字作为主键的值,你即可以在应用程序中构建代码来处理这种需求,也可以用一个序列来产生唯一的数字.如果你想要增进某些查询的性能,你应该考虑创建一个索引,你也可以用索引在列或列的集合上强制唯一性.你可以用同义词为对象提供可替代的名字.下面我们来介绍序列.索引和同义词三个数据库对象.       一.创建和管理序列 序列是用户创建的数据库对象,可以被多个用户共享. 序列的一个典型的用途是创建一个主键的值,它对于每一行必须是唯一的.序列由一个Oracle内部程序产生并增加或减少

深入学习Oracle分区表及分区索引

关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: •       Range(范围)分区 •       Hash(哈希)分区 •       List(列表)分区 •       以及组合分区:Range-Hash,Range-List. 对于表而言(常规意义上的堆组织表),上述分区形式都可以应用(甚至可以对某个分区指定compress属性),只不过分区依赖列不能是lob,long之类数据类型,每个表的分区