用途: <1>模块化
<例子> --公司的员工的管理
1.增加一个员工
2.员工离职
用存储过程和函数来实现
1.增加一个员工
create sequence seq1 start with 7935;
create or replace function insert_emp(
enm emp.ename%type, --员工的名字
ejob varchar2, --职务
mgr number, --上级
ehiredate date,--参加工作时间
esal number, --工资
ecomm number, --津贴
dno number)
return number
as
a number;
begin
--工号来自序列
select seq1.nextval into a
from dual;
--增加了一个员工
insert into emp values (
a,enm,ejob,mgr,ehiredate,esal,ecomm,dno);
return a;
end; &nbs ......
<1> ORACLE的使用
启动和关闭
工具操作ORACLE -- sql*plus
plsql developer
<2> SQL命令
4大类
DDL 数据定义语言 - 建立数据库对象
create /alter/ drop/ truncate
DML 数据操纵语言 - 数据的查看和维护
select / insert /delete /update
TCL 事务控制语言 - 数据是否保存到数据库中
commit / rollback / savepoint
DCL 数据控制语言 -- 查看对象的权限
&nbs ......
a)数据库本身的优化
初始化文件 init.ora
open_cursors = 150 打开的游标的个数
很多的存储过程的时候 可以把它调大些
processes = 150 并发连接的用户数
同时在线的用户很多 可以把它调大 processes = (在线用户数)/2
b)应用程序的优化 ********
<1>序列的使用
自动编号
a) 最大号+1(存在缺陷的,不能用,并发的时候出现随机的错误)
create or replace function f_getmax
return number
as
maxno number;
newmax number;
begin
--取出表中的最大的员工号
selec ......
<1>逻辑备份
不用去拷贝数据库的物理文件
备份逻辑上的结构
外部的工具:导出和导入的工具
DOS下的命令 cmd下执行
导出exp export缩写形式
查看帮助 exp help=y
使用参数文件导出
exp parfile=c:\abc.par
>>>abc.par的内容
a)scott用户连接导出自己的所有对象
userid=scott/tiger --连接的用户scott
file=c:\a1.dmp --导出的文件的名字a1.dmp
--导出了scott用户的所有对象
b)用system连接来导出scott下的所有对象
exp parfile=c:\sys.par
>>>>sys.par的内容
userid=system/manager
file=c:\b1.dmp
owner=(scott) --导出scott用户的所有对象
导出多个用户 ......
Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。
分页查询格式:
SELECT * from
(
SELECT A.*, ROWNUM RN
from (SELECT * from TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
其中最内层的查询SELECT * from TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。
上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。
选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:
SELECT * from
(
SELECT A.*, ROWNUM RN
from (SELECT * from TABLE_NAME) A
)
WHERE RN BETWEEN 21 AND 40
对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。
这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以 ......
初始化相关参数job_queue_processes
alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000 ;job_queue_interval = 10 //调度作业刷新频率秒为单位
job_queue_process 表示oracle能够并发的job的数量,可以通过语句
show parameter job_queue_process;
来查看oracle中job_queue_process的值。当job_queue_process值为0时表示全部停止oracle的job,可以通过语句
ALTER SYSTEM SET job_queue_processes = 10;
来调整启动oracle的job。
相关视图:
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息
-------------------------
提交job语法:
begin
sys.dbms_job.submit(job => :job,
what => 'P_CLEAR_PACKBAL;',
next_date => to_date('04-08-2008 05:44:09', 'dd-mm-yyyy hh24:mi:ss'),
& ......