1.视图:
视图实际上是一条查询语句,是数据的显示方式,是数据库中的虚表。
视图的作用:安全,方便,一致性。
(1).创建视图:
create [or replace] view 视图名
as
SQL查询语句……
为确保视图选项一致性,加上“with check option”。
(2).视图的约束:
a.当组成视图的表是两个或两个以上时,不能通过视图对两个或两个以上的基表做插入、更新等操作。视图多表的更新问题需使用触发器。
b.当创建视图时,加上“with read only”,则视图只读。
c.当视图中含有group by,avg,sum等聚合函数以及distinct时,视图也是只读的。
2.同义词:
同义词相当于别名,利用同义词可以很方便地操纵不同用户模式下的对象。
如:create synonym emp for scott.emp;
为soctt用户的emp表赋予一个emp的同义词,当需要操纵scott.emp表时,直接使用同义词即可。默认同义词是私有的。
创建公共同义词,如:create public synonym dept for scott.dept;
3.序列:
对于Oracle数据库中自增的字段,通过使用序列Sequence来维护。
(1).创建序列:
create sequence mySeq
start with 1 --起始值为1
increment by 1 --每次增加1
order
nocycle --不循环
(2).在表中具体应用序列:
如表:auto(a number, b varchar2(10));
Insert into auto(mySeq.nextval, ‘aa’);
(3).更改序列:
alter sequence 序列名
……
注意:只能修改递增量,不能修改当前值。
4.触发器:
数据库中在某种情况触发下执行的PL/SQL语句块。触发器分为行级和语句级,行级触发器每一条记录触发一次,语句级每次触发只执行一次。
创建简单创建触发器:
create or replace trigger mytrigger
after delete on dept
for each row --行级触发器
begin
delete from emp where deptno = :old.deptno;
end;
/
其中:old和new是oracle数据库中的内存逻辑表,和SQL Server中的inserted和deleted类似。其具体对应关系如下:
old new
insert操作 no yes
delete操作 yes no
update操作 yes yes
注意:在触发器中,不能写commit和rollback等事务控制语句。
5.利用触发器实现表字段自增方法:
使用3中创建的序列mySeq。
create or replace trigger set_no
before insert on emp
for each row
declare
sn number;
begin
select mySeq.nextval into sn from dual;
:new.empo=sn; --给自增字段赋值
end;
/
6.替换触发器:
替换触发器主要是用于解决多表视图问题,创建和使用方法如下:
create or replace trigger update_view
instead of update on myView2
for each row
begin
update dept set dname = :new.dname;
update emp set ename = :new.ename;
end;
/
注意:替换触发器只能建立在视图上。
7.Oracle索引:
数据库中创建索引的目的是为了加快查询的速度,提高查询效率,但是并不是索引越多越好,因为增删记录时数据库也需要维护索引,因此需要在索引提供性能和维护索引开销进行平衡。
创建索引的语法:create index 索引名 on 表名(列名);
Oracle中一种特殊的索引——位图索引,适合于数据量大,而唯一值又很少的情况,如性别。
创建语法:create bitmap index 索引名 on 表名(列名);
8.SQL*loader导入数据:
SQL*loader是Oracle中的一个程序,可以有效将大量数据装入Oracle数据库中,实现数据移植。使用时需要编写控制文件和数据文件(也可以指定)。
SQL*loader的使用:
(1).要导入的数据文件:
对于规则的数据,如:
abc,def
ghi,mns
……
(2).编写控制文件:
控制文件以“ctl”为后缀
load data
infile ‘c:/data.txt’ --指定数据文件
append
into table test( --将数据添加到test表中
m1 char terminated by “,”, --数据以逗号(,)分隔
m2 char terminated by ”,”
)
(3).在命令行中执行以下命令:
sqlldr 用户名/密码 control=”c:/control.ctl” data=”c:/data.txt”; --指定控制文件和数据文件
9.Oracle数据库的备份与恢复:
(1).逻辑备份:
使用Exp进行逻辑备份导出,使用IMP进行逻辑备份导入恢复。备份文件为转储文件,以”.dmp”为后缀。具体使用方法如下:
导出:”exp 用户名/密码@数据库名” --接下来按照提示操作
导入:”imp 用户名/密码” --接下来安装提示操作
(2).物理备份:
物理备份又分为两种:冷备份(脱机备份)、热备份(联机备份)。
a.热备份准备工作:
1).热备份时将日志文件置为规定模式:alter system set log_archive=true scope=spfile。
2).关掉数据库。
3).然后以monut方式重启数据库:startup mount
4).将数据切换到归档模式:
alter database archivelog;
alter database open;
b.热备份命令:
开始备份:alter tablespace 表空间名 begin backup;
结束备份:alter tablespace 表空间名 end backup;
c.热备份后切换日志文件:
alter system archive log current;
alter system switch logfile;
10.开发Oracle函数:
Oracle数据库中函数和存储过程的区别:
本质上并无区别,都是PL/SQL语句块,函数一般是用于通用处理,如数据转换等,而存储过程大多和具体特定的业务逻辑相关,两种的侧重点不同。
(1).基本语法:
create [or replace] function 函数名称(
param1 [in | out | in out] 数据类型1,
param2 [in | out | in out] 数据类型2,
…..
)
return 返回值数据类型
is | as
PL/SQL块;
注意:Oracle数据库的函数都是有返回值的,因此,函数头部必须要带有return字句,函数体内至少要包含一个return语句。
(2).开发Oracle函数的简单例子:
create or replace function get_user
return varchar2
is
declare
user_name varchar2(20);
begin
select username into user_name from User_users;
return user_name;
end;
/
注意:函数可以被PL/SQL和表达式所直接调用,SQL中调用函数只能带输入(IN)参数,SQL中调用函数不能包含insert、update和delete语句。
11.Oracle数据库中对象重新编译:
在Oracle数据库中,当修改了被引用对象的结构时,相关依赖对象就转变为无效状态,所以应重新编译。如:
alter procedure 存储过程名 compile;
alter view 视图名 compile
alter function 函数名 compile
12.Oracle中的包:
Oracle中的包用于逻辑组合相关的PL/SQL类型,PL/SQL项和PL/SQL子程序,可以实现信息隐藏,子程序重载等功能。
包由包规范和包体两部分组成:
(1).包规范:
包规范是包与应用程序之间的接口,用于定义包的公用组件,包括常量,变量,游标,函数等。
创建包规范的语法:
create [or replace] package 包名
is | as
public type and 项声明
子程序
end 包名;
(2).包体:
包体用于实现包规范所定义的过程和函数,为了实现信息隐藏,应在包体里定义私有组件。
创建包体语法:
create [or replace] package body 包名
is | as
private type and 项声明
子程序体
end 包名;
13.包的调用:
私有组件只能在包内部调用,且可以直接调用。公有组件在包内和包外均可调用,包内可以直接调用,包外调用时需要加包名。
(1).调用包公用变量:
exec 包名.变量名
(2).调用包公用子程序:
exec 包名.子程序名
(3).远程调用:
exec 包名.组件名@数据库连接名