ORACLE学习记录

以下全属个人学习oracle的学习记录,仅供参考,有不对的地方欢迎交流。

我的学习oracle的目录大致如下:

一:Oracle基础

1.sql/plus用法详解

2.基本增删改查语句

3.列类型与建表语句

4.正确的查询模型

5.查询子句详解

6.约束

7.连接查询

8.子查询

9.视图

二:Oracle进阶

1.索引

2.序列

3.同义词

4.事务

5.函数

6.触发器

7.pl/sql编程

                 •  匿名块

                 •  控制结构

                 •  过程与函数

                 •  存储过程与存储函数

                 •  游标

三:实际操作

1.sql/plus连接服务器

连接并登陆

sqlplus "用户名/密码[@主机名 as 身份]"

先连接再登陆

sqlplus/nolog

conn 用户名/密码[@主机名 as 身份]

退出:

quit

如图所示:

2.sqlplus做最简单的查询

select 3+2 from dual;   

注意dual是Oracle中的一个伪表,利用这个伪表可以设置或查看序列,或者是调用一些内置的函数,方便操作。

3.sqlplus的缓冲区

我们输入的sql命令,会被sqlplus储存在缓冲区里,

熟练利用缓冲区,可以提高我们书写sql的效率

因为缓冲区的内容 可以 修改/删除,再执行

用list/l 查看缓冲区内容

4.列类型

5.建表语句

create table 表名 (

列名 列类型,

...

);

 

create table 表名

as

select 列1,列2...列N from othoretable;

 

create table 表名

as

select 列1 as 新列1, 列2 as 新列2 ...列N as 新列N

from othertable

 

6.修改表的语句-add 列

alter table cxb add(

address varchar2(60)

);

7.修改表的语句-drop列

作用:删除表中的列

语法: alter table 表名 drop column 列名

 

关于删除列的注意事项:

原则上,列都可以删

但,如果一个列作为主键出现

或者作为另1张表的外键,则不能删除

8.修改表的语句-modify 列

作用:修改表中的列

语法: alter table 表名 modify (

列1 新数据类型 [非空属性]

..

);

关于修改列的注意事项:

如果表中没有数据,则列的长度可增加或减小

如果已有数据,则只能增大,不能减小.

9.修改表的语句-修改列名

作用:修改表中的列名

语法: alter table 表名 rename column 旧列名 to 新列

10.关于表的其他DDL语句

删除表: drop table 表名

改表名: rename table 旧名 to 新名

清空表: truncate table 表名

truncate清空表数据,且不可恢复,慎重.

11.约束

约束概念:

约束是加在表上的一种强制性的规则 ,是保证数据完整性的一种重要手段 .

当向表中插入或修改数据时,必须满足约束所规定的条件.

如性别必须是"男/女",部门号必须是已存在的部门号等等.

 

一般而言,保证数据完整性大致有3种方法

程序代码,触发器,约束.

 

约束类型:

NOT NULL 非空约束

UNIQUE 唯一性约束

PRIMARY KEY 主键约束

FOREIGN KEY 外键约束

CHECK       检查约束

 

11.1:约束的创建(1)

建表时创建约束

 

create table 表名 (

列1 数据类型 constraint 约束名1 约束类型,

列2 数据类型 constraint 约束名2 约束类型,

...

);

11.2:约束的创建(2)

11.3:外键的声明

外键的声明稍复杂一点,因为牵涉到另一张表

 

create table 表名 (

列1 列类型

contraint 约束名 foreign key (列名) references 其他表(列名)

注意: 另一张表被引用的列需是主键或Unique

11.4:建表后添加约束

在需要批量导入数据时,约束会影响导入速度,

可以先不要约束,导入完毕后,再添加约束.

alter table 表名 add (

constraint 约束名 约束类型(列名),

constraint 约束名 约束类型(列名)

);

 

alter table 表名 modify (

列名 constraint 约束名 not null

) ; // 因为not null 类型必须声明在列上,无法声明在表上,所以必须用modify方式来写

11.5:约束的删除与禁用

想改一个约束类型,只能先删除约束再添加新的约束

语法:

alter table 表名 drop constraint 约束名;

如 alter table student drop constraint gen_check

注意:如果删除主键约束时,该主键是另一表的外键,则该主键不能直接删除.

除非连带把外键约束也删除.

如 alter table dept drop constraint pk_dept cascade;

也可以临时禁用1个约束

alter table 表名 disable consstaint 约束名

注意:如果禁用约束后加了一些非法数据,再开启约束是会失败的

12.序列 sequence

序列是一种数据库对象,用来自动生成一组唯一的序号.

序列是一种共享式的对象,多个用户可以共同使用序列中的序号.

一般将序列应用于表的主键列,这样,当向表中插入数据时,主键列就使用了序列的序号,从而保证主键不会重复.

用序列来产生主键,可以获得可靠的主键值.

一句话: 序列就是序号生成器!

12.1:序列 sequence 的创建

create sequence 序列名 increment by n

start with n

maxvalue n | nomaxvalue

minvalue n  | nominvalue

cycle | nocycle

cache n | nocache

上图创建了名称为mm的序列,每次增长1,从1开始,没有最大值,没有最小值,不循环,系统先缓存20个序列。

12.2:序列 sequence 的使用

序列的作用就是为我们提供序号,

序列提供了2个伪列, nextval, currval

很明显,分别是"下个值", "当前值"

select seq1.nextval from dual;

insert into xx表(col1,col2) values (seq1.nextavl,yy);

 

12.3:序列 sequence 的修改和删除

alter sequence 序列名

选项 新值

alter sqquence 序列名

maxvalue 5

注意:

1:不能修改开始值

2:修改只影响新产生的值,不影响已产生的值

drop sequence 序列名

13.同义词

同义词就是别名,外号

create [public] synonym 同义词 for 用户名.对象名

drop synonym 同义词

public 是所有用户可用的同义词,一般由DBA创建

 

注:scott用户默认没有创建synonym的权限

需要授权:

grant create synonym to scott

14.增删改查

14.1:select 子句介绍

Where 条件查询

group by 分组

having 筛选

order by 排序

14.2:select 子句 之group与统计函数

max : 求最大

min : 求最小

sum : 求总和

avg : 求平均

count:求总行数

14.3:select 子句 之group介绍

group by

作用:把行 按 字段 分组

语法:group by col1,col2,...colN

运用场合
常见于统计场合,如按栏目计算帖子数,

统计每个人的平均成绩等.

14.4:select 子句 之having介绍

14.5:子查询

子查询就是在原有的查询语句中,

嵌入新的查询,来得到我们想要的结果集。

一般根据子查询的嵌入位置分为,

where型子查询,from型子查询

14.5.1:where型子查询

where型子查询即是:把内层sql语句查询的结果作为外层sql查询的条件

典型语法:

select * from tableName

where colName = (select colName from tbName where ....)

{where colName in (select colName from tbName where ..)}

14.5.2:exists型子查询

exists即:外层sql查询所查到的行代入内层sql查询,要使内层查询能够成立

查询可以与in型子查询互换,但效率要高.

典型语法:

select * from tablename

where exists(select * from tableName where ...)

14.5.3:from型子查询

from型子查询即:把内层sql语句查询的结果作为临时表供外层sql语句再次查询.

典型语法:

select * from (select * from tableName where ...) where....

15.连接查询 之连接查询语法

左连接的语法.

Select Ltable.* ,Rtable.* from

 Ltable left join Rltable

 on Ltable.colName = Rtable.colName

典型的例子:学生表,科目表,学生选科目id学习,查询学生的时候联查科目表,学生表里存的有科目表的id,查询出学生信息带科目的信息。如图:

 

内连接的语法.

Select Ltable.* ,Rtable.* from

Ltable inner join Rltable

on Ltable.colName = Rtable.colName

16.视图 view

视图是一种虚拟表,本身不保存数据,而是从表中取得的数据。

可以理解为表的映射,或更简单的理解为一个查询结果。

比如,我们频繁的查询如下语句:

select empno,ename,sal from emp where sal > (select avg(sal) from emp);

如果把这个语句定义为视图,并从视图查询数据

16.1:视图 view的用途

1:视图可以帮我们简化查询

如上页中的复杂查询,如果不用视图,则需要子查询才能达到效果

 

2:视图可以帮我更精细的控制权限

比如一张表,有工资列,密码列,等,

我们可以选择列生成视图,开放给不同的用户,

达到列级的权限控制

16.2:视图 view的操作语法

创建视图:

Create or replace view 视图名

As select  语句

With read only  --是否只读

With check option –是否执行约束检查

 

删除视图:

Drop view 视图名

16.3:复杂视图

如果select 语句中只针对单表进行列的查询,且没有对列进行表达式运算或函数运算,

这种称为简单视图。

如果对多个表进行查询,或列经过运算,或分组等,这种称为复杂视图。

复杂视图不能进行DML操作

本质区别:数学上是否一一对应。

即任意一行视图的记录,能对应表中唯一的一行,就是简单视图

17.索引 index

索引就像字典前的“按拼音/偏旁查询目录”,

可以提高查询效率,降低了增删改的效率。

*数据库内部常用哈希索引,和btree索引

17.1:索引 index 的创建与查询

create [unique] index 索引名

on 表名(1,列2...)

1个列上称为单列索引

否则称复合索引

索引信息存放在 user_indexes ,user_ind_columns

删除索引

Drop index 索引名

17.2:索引 index 的注意事项

where子句中经常使用的列上创建索引

大量重复的值加索引意义不大

具有唯一值的列是建索引的好的选择,但具体还要看是否经常用他查询。

如果where经常用某N个列一些查询,考虑建复合索引

索引是有代价的--降低了增删改的速度,并不是加的越多越好。

18.事务

原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。

数据库事务的不可再分的原则即为原子性。

组成事务的所有查询必须:

要么全部执行,要么全部取消(就像上面的银行例子)。

一致性(Consistency):指数据的规则,在事务前/后应保持一致

隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的.

持久性(Durability):当事务完成后,其影响应该保留下来,不能撤消

18.1:事务 之事务的用法

开启事务(第1条dml语句即进入事务)

执行sql操作(普通sql操作)

设置保存点(savepoint 保存点)

提交/回滚(commit/rollback)

部分回滚(rollback to 保存点)

18.2:事务的隐式提交

事务可以显式的提交,也可以隐式的提交

显式:commit

隐式:   遇到DDLDCL语句,或退出系统时

          会隐式提交

 

四:PL/sql编程

1.PL/sql概念

Procedural  language

sql是一种标准的数据库访问语言,但无法编程,

PL/SQLOracle公司开发的“方言”,允许编程,

是对SQL的一种补充。

2.PL/sql的结构

declare

 变量声明部分

begin

 执行部分

exception

 异常处理部分

End

*:declare exception部分是可选的

默认:调用一个匿名块/存储过程后,只执行不输出

学习调试时: set serveroutput on

3.PL/sql中变量的定义

变量 的定义有2种格式

变量名 变量类型 [约束] default 默认值

变量名 变量类型 [约束] [:=初始值]

-------

变量名 表名%rowtype

变量名 表名.%type

变量名 另一变量%type

 

4.PL/sql块中流程控制

5.PL/sql访问数据库

PL/SQL的主要目的是对数据库进行操作,

因此,PL/SQL块中可以包含select语句,DML语句,

还可以包含DCL语句.

但不能包含DDL语句.

通过SQL语句及流程控制,可以编写复杂的PL/SQL,

对数据库进行复杂的访问.

注意,PL/SQL一般是在应用程序中调用.

 

 

6.附录:PL/sql预定义异常

NO_DATA_FOUND   在使用SELECT INTO 结构,并且语句返回NULL值的时候;访问嵌套表中已经删除的表或者是访问INDEX BY表(联合数组)中的未初始化元素就会出现该异常

TOO_MANY_ROWS   常见错误,在使用SELECT INTO 并且查询返回多个行时引发。如果子查询返回多行,而比较运算符为相等的时候也会引发该异常。

ZERO_DIVIDE 将某个数字除以0的时候,会发生该异常

ACCESS_INTO_NULL  试图访问未初始化对象的时候出现

CASE_NOT_FOUND  如果定义了一个没有ELSE子句的CASE语句,而且没有CASE语句满足运行时条件时出现该异常

COLLECTION_IS_NULL  当程序去访问一个没有进行初始化的NESTED TABLE或者是VARRAY的时候,会出现该异常

CURSOR_ALREADY_OPEN  游标已经被OPEN,如果再次尝试打开该游标的时候,会出现该异常

DUP_VAL_ON_INDEX  如果插入一列被唯一索引约束的重复值的时候,就会引发该异常(该值被INDEX认定为冲突的)

INVALID_CURSOR  不允许的游标操作,比如关闭一个已经被关闭的游标,就会引发

INVALID_NUMBER  给数字值赋非数字值的时候,该异常就会发生,这个异常也会发生在批读取时候LIMIT子句返回非正数的时候

LOGIN_DENIED  程序中,使用错误的用户名和密码登录的时候,就会抛出这个异常

NOT_LOGGED_ON  当程序发出数据库调用,但是没有连接的时候(通常,在实际与会话断开连接之后)

PROGRAM_ERROR  Oracle还未正式捕获的错误发生时常会发生,这是因为数据库大量的Object功能而发生

ROWTYPE_MISMATCH  如果游标结构不适合PL/SQL游标变量或者是实际的游标参数不同于游标形参的时候发生该异常

SELF_IS_NULL  调用一个对象类型非静态成员方法(其中没有初始化对象类型实例)的时候发生该异常

STORAGE_ERROR  当内存不够分配SGA的足够配额或者是被破坏的时候,引发该异常

SUBSCRIPT_BEYOND_COUNT  当分配给NESTED TABLE或者VARRAY的空间小于使用的下标的时候,发生该异常(类似于javaArrayIndexOutOfBoundsException

SUBSCRIPT_OUTSIDE_LIMIT  使用非法的索引值来访问NESTED TABLE或者VARRAY的时候引发

SYS_INVALID_ROWID  将无效的字符串转化为ROWID的时候引发

TIMEOUT_ON_RESOURCE  当数据库不能安全锁定资源的时候引发

USERENV_COMMITSCN_ERROR  只可使用函数USERENV('COMMITSCN')作为INSERT语句的VALUES子句中的顶级表达式或者作为UPDATE语句的SET子句中的右操作数

VALUE_ERROR  将一个变量赋给另一个不能容纳该变量的变量时引发

7.存储过程与存储函数

前面用到的过程和函数都是写在PL/SQL块中,

放在缓冲区里.没有进行保存,

下次要使用了再次声明,调用.

 

我们可以把过程和函数建立并保存在数据库中,形成一个对象.

这种存储后的过程和函数,称为:

存储过程 存储函数

7.1:存储过程与存储函数创建语法

create or replace procedure 名称[(参数)]

authid current_user|definer --以定义者还是调用者的身份运行

is[不要加declare]

变量声明部分

begin

主体部分

exception

异常部分

end;

7.2:存储过程与存储函数的删除

drop procedure 存储过程名

drop function 函数名

8.游标-cursor

 

游标是一种私有的工作区,用于保存sql语句的执行结果.

在执行一条sql语句时,数据库服务区工作区,

这里保存了sql语句执行的相关信息

 

工作区有2种形式的游标,隐式的和显式的.

隐式游标由数据库自动定义,显示游标由用户自己定义.

游标-cursor 简单例子:

begin

delete from student where sid=9;

if SQL%ROWCOUNT>0 then

dbms_output.put_line('影响了');

else

dbms_output.put_line('没影响');

end if;

end;

9.触发器

个人粗暴的解释,就是当某个动作发生之后或者之前触发执行。

9.1:触发器创建语法

u创建触发器的语法

create trigger 触发器名称

after/before/instead of(触发时间)

insert/update/delete [of列名] (监视事件)

on  表名 (监视地址)

[for each row [when条件]]

begin

sql1;

..

sqlN;

end

9.2:触发器的删除

drop trigger triggerName

10.创建用户与删除用户

 create user 用户名 identified by “密码"

 default tablespace users

 temporary tablespace temp

quota 20M on users

password expire

account unlock;

drop user 用户名

如果用户名已经有表,视图等,则不允许删除。

11.修改用户密码

后续附上个人练习一些片段,瞌睡来兮了,偷个懒,很多都是截图了,嘻嘻。。。。。。

 

 


Microsoft Windows [版本 10.0.17134.165]
(c) 2018 Microsoft Corporation。保留所有权利。

C:\Users\81046>sqlplus

SQL*Plus: Release 11.2.0.1.0 Production on Thu Aug 16 13:53:36 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Enter user-name:
ERROR:
ORA-01017: invalid username/password; logon denied


Enter user-name: sys
Enter password:
ERROR:
ORA-28009: connection as SYS should be as SYSDBA or SYSOPER


Enter user-name: system
Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select 3
  2  select 3 from dual;
select 3 from dual
*
ERROR at line 2:
ORA-00923: FROM keyword not found where expected


SQL> select 3 from dual;

         3
----------
         3

SQL> create table student(
  2  sid number not null,
  3  sname char(10)
  4  );

Table created.

SQL> insert into student values (1,'wangwu');

1 row created.

SQL> select * from student;

       SID SNAME
---------- ------------------------------
         1 wangwu

SQL> alert table student add(
SP2-0734: unknown command beginning "alert tabl..." - rest of line ignored.
SQL> alter table student add(
  2  area varchar2(20),
  3  age number(3,1),
  4  height number(3,2)
  5  );

Table altered.

SQL> desc student;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SID                                       NOT NULL NUMBER
 SNAME                                              CHAR(10)
 AREA                                               VARCHAR2(20)
 AGE                                                NUMBER(3,1)
 HEIGHT                                             NUMBER(3,2)

SQL> alter table drop column height;
alter table drop column height
            *
ERROR at line 1:
ORA-00903: invalid table name


SQL> alter table student  drop column height;

Table altered.

SQL> alter table student modify age number(5,0);

Table altered.

SQL> des

declare
  i int :=9;
  begin
  i:=i*2;
  dbms_output.put_line('now i is:'||i);
  end;
  /

 

 

declare
    age number default 90;
    height number := 175;
    gender char(2) := 'mile';
begin
    if gender='mile' then
        dbms_output.put_line('you can mary with femile');
    end if;

    if height>170 then
        dbms_output.put_line('can play basketebool');
    else 
        dbms_output.put_line('can play footbool');
    end if;

    if age<20 then
        dbms_output.put_line('younth');
    elsif age <= 50 then
        dbms_output.put_line('seccuss');
    elsif age <=70 then
        dbms_output.put_line('happniess');
    else  
        dbms_output.put_line('subject');
    end if;

end;

 


存储过程一个没有返回值的函数

 

 create or replace procedure  p1(dpnum number) is
 cnt number;
 sals number;
 begin
select count(*),sum(sal) into cnt,sals from emp where deptno=dpnum;
dbms_output.put_line('has '||cnt||'worker,sals is'||sals);
 end;
 /

 

 

 create or replace procedure  p1(dpnum number) is
 cnt number;
 sals number;
dn varchar2(14);
dl varchar2(13);
 begin
select dname,loc into dn,dl from dept where deptno=dpnum;
select count(*),sum(sal) into cnt,sals from emp where deptno=dpnum;
dbms_output.put_line('localtion:'||dl||'company:'||dn||'has '||cnt||'worker,sals is'||sals);
 end;
 /

 

 

 create or replace procedure  p1(dpnum number) is
 cnt number;
 sals number;
dn varchar2(14);
dl varchar2(13);
 begin
select dname,loc into dn,dl from dept where deptno=dpnum;
select count(*),sum(sal) into cnt,sals from emp where deptno=dpnum;
dbms_output.put_line('localtion:'||dl||'  company:'||dn||'has '||cnt||'worker,sals is'||sals);
 end;
 /

 

create or replace procedure p12(dpnum int) is
type dpinfo is record 
(
dname varchar2(14),
loc varchar2(13),
cnt int,
sal number
);
dp dpinfo;
begin

select dname,loc into dp.dname,dp.loc from dept where deptno=dpnum;

select count(*),sum(sal)  into dp.cnt,dp.sal from emp where deptno=dpnum;

dbms_output.put_line(dp.dname||'--'||dp.loc||'--'||dp.cnt||'--'||dp.sal);
end;
/

 

 

create or replace procedure p12(dpnum int) is
type dpinfo is record 
(
dname varchar2(14),
loc varchar2(13),
cnt int,
sal number,
);
dp dpinfo;
begin

select dname, loc into dp.dname, dp.loc from dept where deptno=dpnum;

select count(*), sum(sal)  into dp.cnt, dp.sal from emp where deptno=dpnum;

dbms_output.put_line(dp.dname||'--'||dp.loc||'--'||dp.cnt||'--'||dp.sal);

end;
/

 

create or replace procedure p12(dpnum int) is
type dpinfo is record 
(
dname varchar2(14),
loc varchar2(13),
cnt int,
sal number,
);
dp dpinfo;
begin

select dname, loc into dp.dname, dp.loc from dept where deptno=dpnum;

select count(*), sum(sal)  into dp.cnt, dp.sal from emp where deptno=dpnum;

dbms_output.put_line(dp.dname||'__'||dp.loc||'__'||dp.cnt||'__'||dp.sal);

end;
/

 create or replace procedure p13(dpnum int) is
   dp dept%rowtype;
   dn dept.dname%type;
  begin
   select deptno,dname,loc into dp.deptno,dn,dp.loc from dept
   where deptno=dpnum;
   dbms_output.put_line(dp.deptno||'__'||dn||'__'||dp.loc);
exception
when NO_DATA_FOUND then
dbms_output.put_line('sorry NO_DATA_FOUND');
    end;
    /

 

 

 

 

 

 

以上是表级触发器

监听到表里的数据有更改则触发

 

 create trigger tg1
  after insert
    on  o
   begin
    dbms_output.put_line('has somone pay goods');
   end;
    /

 

 

 

 create or replace trigger tg2
  after insert
    on  o for each row
   begin
    update g set cnt=cnt-:new.much where gid=:new.gid;
   end;
    /

create or replace trigger tg2
  after insert
    on  o for each row
   begin
    update g set cnt=cnt-:new.much where gid=:new.gid;
dbms_output.put_line('update number');
   end;
    /

 

 

create or replace trigger tg3
before insert on o
for each row
declare
curr number;
begin
select cnt into curr from g where gid=:new.gid;
if curr<:new.much then
:new.much :=curr;
end if;
update g set cnt=cnt-:new.much where gid=:new.gid;
end;
/

 

 

create or replace trigger tg3
before insert on o
for each row
declare
curr number;
begin
select cnt into curr from g where gid=:new.gid;
if curr<:new.much then
:new.much :=curr;
end if;
update g set cnt=cnt-:new.much where gid=:new.gid;
end;
/

 

 

Microsoft Windows [版本 10.0.17134.228]
(c) 2018 Microsoft Corporation。保留所有权利。

C:\Users\81046>sqlplus sys/root123456 as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on Fri Aug 17 09:00:03 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> conn scott/tiger;
Connected.
SQL> show user
USER is "SCOTT"
SQL> select seq1.nextval from dual;

   NEXTVAL
----------
        21

SQL> create view newgoods as select * from goods where doods_id>1;
create view newgoods as select * from goods where doods_id>1
                                                  *
ERROR at line 1:
ORA-00904: "DOODS_ID": invalid identifier


SQL> select * from goods;

  GOODS_ID     CAT_ID
---------- ----------
GOODS_NAME
--------------------------------------------------------------------------------
         1          8
nokia

         7          8
fengtian

         8          8
food8


  GOODS_ID     CAT_ID
---------- ----------
GOODS_NAME
--------------------------------------------------------------------------------
         9          5
book9

        10          5
book10

        11          5
book11


6 rows selected.

SQL> create view newgoods as select * from goods where goods_id>1;

View created.

SQL> select * from newgoods;

  GOODS_ID     CAT_ID
---------- ----------
GOODS_NAME
--------------------------------------------------------------------------------
         7          8
fengtian

         8          8
food8

         9          5
book9


  GOODS_ID     CAT_ID
---------- ----------
GOODS_NAME
--------------------------------------------------------------------------------
        10          5
book10

        11          5
book11


SQL> set linesize 2000
SQL> select * from newgoods;

  GOODS_ID     CAT_ID GOODS_NAME
---------- ---------- ------------------------------------------------------------------------------------------
         7  

 

 

 

 

 

 

 

 

 

目录如下: 1 Oracle 结构组件 目标 1-2 基本结构概述 1-3 Oracle 服务器 1-4 Oracle 实例 1-5 建立连接和创建会话 1-6 Oracle 数据库 1-7 物理结构 1-8 内存结构 1-9 系统全局区(SGA) 1-10 共享池 1-12 库缓存 1-13 数据字典缓冲区 1-14 数据库缓冲区 1-15 重做日志缓冲区 1-18 大储存池 1-19 JAVA 池 1-20 程序全局区(PGA) 1-21 进程结构 1-22 用户进程 1-23 服务进程 1-24 后台进程 1-25 数据库写进程(DBWn) 1-26 日志写进程(LGWR) 1-27 系统监控器(SMON) 1-28 进程监控器(PMON) 1-29 检查点进程(CKPT) 1-30 归档进程(ARCn) 1-31 逻辑结构 1-32 执行一个 SQL 语句 1-33 小结 1-34 2 Oracle 服务器入门 目标 2-2 数据库管理工具 2-3 Oracle 通用安装程序 2-4 交互式安装 2-5 使用反应文件的非交互式安装 2-6 Oracle 数据库配置助手 2-8 最优灵活体系结构(OFA) 2-9 Oracle 软件和文件位置 2-10 数据库管理员用户 2-11 ii 数据管理员的验证方式 2-12 使用密码文件验证 2-13 SQL*PLUS 2-14 Oracle 企业管理器 2-15 Oracle 企业管理器结构:基于 JAVA 的控制台和应用程序 2-16 Oracle 企业管理器结构:管理节点 2-17 Oracle 企业管理器控制台 2-18 DBA 工具 2-19 小结 2-20 3 管理 Oracle 实例 目标 3-2 初始化参数文件 3-3 PFILE initSID.ora 3-5 PFILE 例子 3-6 SPFILE spfileSID.ora 3-7 创建一个 SPFILE 3-8 SPFILE 例子 3-9 Oracle 管理文件 3-10 Oracle 管理文件例子 3-11 打开一个数据库 3-12 STARTUP 命令 3-15 ALTER DATABASE 命令 3-16 以受限模式打开数据库 3-17 以只读模式打开数据库 3-18 关闭数据库 3-19 关闭选项 3-20 用检测诊断文件管理一个实例 3-22 警报日志文件 3-23 后台跟踪文件 3-24 用户跟踪文件 3-25 允许和禁止用户跟踪 3-26 小结 3-26 4 创建数据库 目标 4-2 管理和组织一个数据库 4-3 创建的前提条件 4-4 规划数据文件的位置 4-5 创建数据库的方法 4-6 操作系统环境 4-7 使用数据库配置助手 4-8 创建数据库 4-9 数据库信息 4-10 iii 典型或用户自定义安装 4-11 其它参数 4-12 完成数据库创建 4-13 手动创建数据库 4-14 准备参数文件 4-15 创建 SPFILE 4-15 启动实例 4-16 创建数据库 4-17 使用 OMF 创建数据库 4-19 差错检测 4-20 数据库创建以后 4-21 小结 4-22 5 数据字典内容和使用 目标 5-2 数据字典 5-3 数据字典内容 5-5 如何使用数据字典 5-6 数据字典视图种类 5-7 动态性能表 5-8 查询数据字典和动态性能视图 5-9 数据字典例子 5-10 小结 5-10 6 维护控制文件 目标 6-2 控制文件 6-3 控制文件的内容 6-4 使用 SPFILE 多重控制文件 6-5 使用 init.ora 多重控制文件 6-6 用 OMF 管理控制文件 6-7 获得控制文件的信息 6-8 小结 6-9 7 维护重做日志文件 目标 7-2 使用重做日志文件 7-3 重做日志文件的结构 7-4 重做日志是如何工作的 7-5 强制日志切换和检查点 7-6 增加联机重做日志组 7-7 增加联机重做日志成员 7-8 删除联机重做日志组 7-9 删除联机重做日志成员 7-10 iv 清除、重定位或重命名联机重做日志文件 7-11 联机重做日志的配置 7-12 用 OMF 管理联机重做日志 7-13 获取组和成员的信息 7-14 归档重做日志文件 7-16 小结 7-18 8 管理表空间和数据文件 目标 8-2 概述 8-3 数据库的储存层次 8-5 SYSTEM 和非 SYSTEM 表空间 8-7 创建表空间 8-8 表空间的空间管理 8-9 本地管理表空间 8-10 字典管理表空间 8-11 改变存储设置 8-12 回滚表空间 8-13 临时表空间 8-14 缺省临时表空间 8-15 缺省临时表空间的限制 8-16 脱机状态 8-17 只读表空间 8-19 删除表空间 8-20 改变表空间的大小 8-21 允许数据文件的自动增长 8-22 手工改变数据文件的大小 8-23 给表空间添加数据文件 8-24 移动数据文件:ALTER TABLESPACE 8-25 为表空间的创建设置 ORACLE 管理文件(OMF) 8-27 使用 OMF 创建表空间 8-28 获得表空间的信息 8-29 小结 8-29 9 储存结构与关系 目标 9-2 概述 9-3 段的类型 9-4 储存子句的优先次序 9-7 片的分配和重新分配 9-8 使用和释放片 9-9 数据块 9-10 数据块的内容 9-11 块空间的利用的参数 9-12 v 自动段空间管理 9-14 设置自动段空间管理 9-16 手动数块管理 9-17 块空间的用法 9-18 数据字典视图 9-19 获取储存信息 9-20 小结 9-21 10 管理回滚段 目标 10-2 回滚段管理概述 10-3 回滚段 10-4 回滚段:用途 10-5 读一致性 10-6 回滚段的类型 10-7 自动回滚管理:概念 10-8 自动回滚管理:设置 10-9 自动回滚管理:初始化参数 10-10 自动回滚管理:UNDO 表空间 10-11 自动回滚管理:改变和 UNDO 表空间 10-12 自动回滚管理:转换 UNDO 表空间 10-13 自动回滚管理:删除一个 UNDO 表空间 10-14 自动回滚管理:其它参数 10-15 回滚数据的状态 10-16 自动回滚管理:调整 UNDO 表空间大小 10-17 自动回滚管理回滚配额 10-18 获取回滚段信息 10-19 小结 10-20 11 管理表 目标 11-2 储存用户数据 11-3 Oracle 数据类型 11-5 ROWID 格式 11-8 行的结构 11-10 创建一张表 11-11 创建临时表 11-13 创建表:指南 11-14 修改储存参数 11-15 手工分配片 11-16 重构非分区表 11-17 截断一张表 11-18 删除一张表 11-19 删除一列 11-20 vi 使用 UNUSED 选项 11-21 获取表的信息 11-23 小结 11-25 12 管理索引 目标 12-2 索引的分类 12-3 B 树索引 12-4 位图索引 12-6 B 树索引和位图索引的比较 12-7 创建普通 B 树索引 12-8 创建索引:指导 12-10 创建位图索引 12-11 修改索引的储存参数 12-12 分配和回收索引空间 12-13 重构索引 12-14 联机重构索引 12-16 合并索引 12-17 检查索引的有效性 12-18 删除索引 12-19 确认不使用的索引 12-20 获取索引信息 12-21 小结 12-21 13 维护数据的完整性 目标 13-2 数据的完整性 13-3 约束的类型 13-4 约束的状态 13-5 约束的检测 13-7 定义即时约束或延迟约束 13-8 强制主键和唯一键 13-9 外部关键字的考虑 13-10 在建表时定义完整性约束 13-11 定义约束的指导原则 13-13 允许约束 13-14 使用 EXCEPTIONS 表 13-16 获取约束信息 13-18 小结 13-20 14 管理密码安全和资源 目标 14-2 配置文件 14-3 密码管理 14-4 vii 允许密码管理 14-5 帐号密码锁定 14-6 密码寿命和过期 14-7 密码历史 14-8 密码验证 14-9 用户自定义密码函数 14-10 密码验证函数 VERIFY_FUNCTION 14-11 创建配置文件:密码设置 14-12 修改配置文件:密码设置 14-14 删除配置文件:密码设置 14-15 资源管理 14-16 允许资源限制 14-17 在会话级别设置资源限制 14-18 在调用级别设置资源限制 14-19 创建配置文件:资源限制 14-20 使用数据库资源管理器管理资源的使用 14-22 资源计划指示 14-24 获取密码和资源限制的信息 14-25 小结 14-26 15 管理用户 目标 15-2 用户和安全 15-3 数据库方案 15-4 检查创建用户 15-5 创建新用户:数据库验证 15-6 创建新用户:操作系统验证 15-8 改变用户的表空间限额 15-9 删除用户 15-10 获取用户的信息 15-11 小结 15-12 16 管理权限 目标 16-2 管理权限 16-3 系统权限 16-4 系统权限:例子 16-5 授予系统权限 16-6 SYSDBA 和 SYSOPER 权限 16-7 系统权限限制 16-8 回收系统权限 16-9 使用 WITH ADMIN OPTION 选项时回收系统权限 16-10 对象权限 16-11 授予对象权限 16-12 viii 回收对象权限 16-13 使用 WITH GRANT OPTION 选项时回收对象权限 16-14 获取权限信息 16-15 审计 16-16 审计指南 16-17 审计种类 16-19 数据库审计 16-20 审计选项 16-21 查看审计选项 16-23 获取审计记录 16-24 小结 16-25 17 管理角色 目标 17-2 角色 17-3 角色的优点 17-4 创建角色 17-5 预定义的角色 17-6 修改角色 17-7 分配角色 17-8 建立默认角色 17-9 应用程序角色 17-10 允许和禁止角色 17-11 撤销用户角色 17-13 删除角色 17-14 创建角色指南 17-15 使用密码和默认角色指导原则 17-16 显示角色信息 17-17 小结 17-18 18 使用全球支持 目标 18-2 全球支持特性 18-3 不同类型的方案编码 18-4 数据库的字符集和国家字符集 18-6 选择 Oracle 数据库字符集的指导原则 18-7 选择 Oracle 数据库国家字符集的指导原则 18-8 为双字节字符数据库选择一种统一代码方案 18-9 为双字节字符数据类型选择一种统一代码方案 18-10 指定语言相关行为 18-11 为服务器指定语言相关行为 18-12 语言和地区相关的缺省值 18-13 为会话指定语言相关的行为 18-14 客户端-服务器体系中的字符集 18-15 ix 为会话指定语言相关的行为 18-16 语言排序 18-17 NLS 排序 18-18 在 SQL 函数中使用 NLS 参数 18-20 语言索引支持 18-23 使用 NLS 导入和装载数据 18-24 获取字符集相关的信息 18-25 获取 NLS 相关的设置信息 18-26 全球支持实用工具 18-30 小结 18-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值