前段时间给公司做个Oracle培训,一直在学oracle,但都对其没有完整的整理,这次对Oracle知识做了一个整理:
Oracle
1,体系机构
1,内存体系
sga 系统程序区
共享池:执行计划缓存和数据对象缓存
数据缓存池:数据缓存(keep,default,recycle)
重做日志池:日志缓存
大池:用于备份数据库
流池:用于流复制,保存复制的队列数据
java池:保存java对象
pga 进程程序区
sort排序区
hash连接区
merge合并区
2,进程体系
1, smon 系统监控进程,用于启动时执行检查点,恢复数据库异常退出的数据,
2, pmon 程序监控进程, 清理失败的进程资源(比如异常连接,断了清理资源),释放锁,内存等
3, dbwn 数据写进程 将数据写入文件中
4, lgwr 日志写进程 4:1,commit,2,超过1M或者1/3大小 3,dbwn执行之前 4,每3秒
5, arch 归档日志进程 1,在日志写满后触发 将日志文件复制到另一个地方
6,ckpt 检查点进程:检查点进程 将检查点信息写入数据文件的头部,更新控制文件的scn,维护
数据链表给dbwr,提供给他将数据写入数据文件,系统down机,提高数据恢复时间
3,文件体系
1,参数文件
2,控制文件
3,数据文件
4,日志文件
……
4,数据结构
1,块:oracle中存取的最小单元
2,区:oracle中是按区来分配
3,段:在创建对象时,分配的空间
4,表空间,一组文件的集合
2,Oracle数据类型
1,number ,varchar2…….
scn
系统更改号,保证查询的一致性,可恢复性
alter user hr identified by hr account unlock ,解锁hr用户,设置hr密码为hr
PLSQL介绍
结果集也可以作为一个“伪表”再次放在From子句中进行查询
select * from (
select rownum rn, id, name from students)
where rn > 2;
Merge语句介绍:表 A 中的记录更新表 B 中的记录
语法如下:
merge into 表1
using 表2 或者(select * from 表2)别名
on (表1.id=表2.id)
when matched then update set 表1.列=表2.列
这里的表1为更新的表,表2为取的数据源
以上是有条件的
create table test1 as
select rownum,rownum*1000 from tab
或者
create table test1 as
select rownum,rownum*1000 from dual connect by rownum<10;
通过merge语句插入测试表数据表
create table test2(id2 int,sal2 int),建立测试表test2
merge into test2
using test1
on(1=0)
when not matched then
insert values(id,sal/2)
更新表
merge into test2
using test1
on(test2.id2=test1.id)
when matched then
update set sal=sal+sal2/2
update语句用法(和sql server的update的不一样),两个表关联查询取出数据,然后更新
SQL server
update a set a.name=b.name from a inner join b on a.id=b.oid where a.id='11'
Oracle
update a set a.name=(select b.name from b where b.oid=a.id)
from a.id='11'
分析函数介绍
row_number() over (order by id desc),用于分页
dense_rank 排名行数,顺序始终是连续
rank 顺序可以不连续
ntile(n) 分组
窗口函数 over (order by id desc)
递归语句start with....connect by的使用
select 节点ID,节点名称,level
from 表
connect by prior 节点ID=上级节点ID
start with 上级节点ID=节点值
节点ID就是向上查
如果是上级节点ID,就是向下查
start with表示从那个记录开始
动态SQL介绍
sql server 执行动态语句 exec('delete from 表')
Oracle 执行动态语句(注明:不用使用sql名称作为变量名)
execute immediate '';
例子:
declare
tt VARCHAR2(200);
begin
tt:='create table tbs(id int)';
begin
EXECUTE immediate tt;
exception
when OTHERS then
dbms_output.put_line('system error');
end;
end;
动态SQL
declare
i int;
j int;
BEGIN
j:=1;
EXECUTE immediate 'select * from (select count(*) from dual connect by rownum<10) where 1=:1' into i using j;
dbms_output.put_line(i);
end;
函数介绍
只有一种(IN)
create or replace function 函数名称(变量名称 类型...)或者(表.列%type)绑定类型
return 类型(int,date,varchar2)
as
v_i varchar2(200); --声明类型
begin
--程序逻辑
return 数据值;
end;
实例
create or replace function f_name(id int)
return int
as
s int;
begin
s:=1212;
return (s+id);
end;
调用
select f_name(12) from dual;
存储过程
create or replace procedure pro_test(s_sql in varchar2)
as
s_ad varchar2(300):='www';
begin
dbms_output.put_line(s_sql|| s_ad);
end;
在程序中执行
begin
pro_test('sdfsafd');
end;
在sqlplus中执行
exec pro_test('wewe');
这里有in,out,in out三钟参数类型,out的值可以传出,in out可以传入和传出
包介绍(重载)
包声明
包主体
游标使用
显式游标和隐式游标
游标的属性有四种,分别是SQL %ISOPEN,SQL %FOUND,SQL%NOTFOUND,SQL %ROWCOUNT。
%ISOPEN 判断游标是否被打开,如果打开%ISOPEN 等于true,否则等于false
%FOUND %NOTFOUND 判断游标所在的行是否有效,如果有效,则%FOUNDD等于true,否则等于false
%ROWCOUNT 返回当前位置为止游标读取的记录行数。
显示游标
语法:
声明游标
打开游标
从游标中取回数据
关闭游标
例子:
declare
cursor cs is select * from bas_code; --申明游标
cs1 cs%rowtype ;
begin
open cs;--打开游标
loop
fetch cs into cs1;--遍历游标
exit when cs%notfound;
dbms_output.PUT_LINE(cs1.code);
end loop;
close cs; --关闭游标
end;
隐式游标
游标FOR循环
for ... in 是隐式游标
循环的使用
LOOP … END LOOP ( EXIT [ WHEN ] )
如:
declare
num INTEGER;
begin
num:=5;
loop
num:=num-1;
dbms_output.put_line(num);
exit when num=1;
end loop;
end;
WHILE … LOOP ---- the WHILE loop
declare
num INTEGER;
begin
num:=5;
loop
num:=num-1;
dbms_output.put_line(num);
exit when num=1;
end loop;
end;
FOR … LOOP ----the numeric FOR loop
declare
i int;
begin
i:=5;
for x in 1..i loop
dbms_output.put_line(x);
end loop;
end;
异常处理
常用函数:
SELECT LENGTH('CANDIDE') FROM DUAL
SELECT SUBSTR('ABCDEFG',3,4) "Substring" FROM DUAL
SELECT UPPER('Large') "Uppercase" FROM DUAL;
select to_date('2008-01-01 10:10:10','yyyy-mm-dd hh24:mi:ss') from dual
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual
select to_char(1212) from dual
使用字符串“ab”右填充一个名字,使它达到12个字符长度
SELECT RPAD('MORRISON',12,'ab') "RPAD example" FROM DUAL;
类似有:
SELECT LPAD('Page 1',15,'12') "LPAD example" FROM DUAL
nvl:
将 NULL 替换成指定的值,非null返回以前的值
select nvl(null,'ss') FROM dual
nvl2
对null替换,非null为12,为null为11
select nvl2(null,12,11) from dual
sysdate
当前时间
select to_char(sysdate+1,'yyyy-mm-dd hh24:mi:ss') 加一天,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') 现在时间 from dual
decode
将 expr 与 search 逐一比较,若二者相等,则返回对应的 result;若全部不相等,则返回 default,若省略 default,则返回 NULL
select decode(12,12,2,4) from dual
||连接字符,非”+“
select '一'||'开始' 连接 from dual
trim,截取字符
select length(trim('wwww ')) from dual
REPLACE 取代字符
select replace('asdfsd','f','333') from dual
Substr 截取字符,(包含起点的字符)
SELECT SUBSTR('ABCDEFG',3,4) "Substring" FROM DUAl
instr 查找字符在字符串中查询到的位置
select instr('abcdef','bc') from dual
if函数
IF <condition1> THEN
<code1>;
ELSIF <condition2> THEN
<code2>;
[ ELSE
<code3>; ]
END IF;
这里有then,elsif和end if;
case函数
CASE <expression>
WHEN <result1> THEN
<statements1>;
WHEN <result2> THEN
<statements2>;
...
ELSE
<statements_else>;
END CASE;
发表评论
-
Oracle plsql后台程序建议
2011-03-02 12:03 696个人改进建议: 1、游标取数时,采用批量取数的方法: ... -
oracle10g 的一个问题
2011-03-02 11:39 640oracle10g 的一个问题: 创建主键的时候, 默 ... -
Oracle视图使用
2011-02-15 17:13 0Oracle视图使用经验谈: 1、如果视图仅仅是 ... -
Oracle 10g 中的递归查询(树型查询)
2011-01-27 01:35 924Oracle 10g 中的递归查询(树型查询) 一、树型表 ... -
PLSQL 中Merge into和Update的用法
2011-01-27 01:31 1478在oracle 中有个语法:merge 用法如下: ... -
Oracle培训的总结
2011-01-27 01:30 698前段时间,因为要升级系统到Oracle环境,公司请了一位在 ... -
Oracle 简单的SQL调优
2011-01-27 01:27 728今天刚看到一篇简单的SQL调优,自己也试了一下优化。原文如下: ... -
PL/SQL最差实践
2011-01-27 01:15 5661. 超长的PL/SQL代码 影响:可维护性,性能 ... -
大表变小表,小表再连接————记一次PL/SQL优化过程
2011-01-27 01:12 1242公司的业务系统中存在一个大的日志表,表大约是这样:cre ... -
高效的PL/SQL程序设计--批量处理
2011-01-27 00:59 612批量处理一般用在ETL操作, ETL代表提取(extract) ... -
PL/SQL用户指南与参考--PL/SQL应用程序性能调优(转)
2011-01-27 00:57 623PL/SQL应用程序性能调优 <!-- Instanc ... -
PLSQL 中Merge into和Update的用法
2011-01-18 20:42 1280这两天一直在处理关于SQL server存储过程转换到Orac ... -
PL/SQL优化
2011-01-18 19:51 826PL/SQL优化 注:O代表比X 更优化的写法。 以 ... -
Oracle SQL 内置函数大全
2009-03-25 21:25 607SQL中的单记录函数 1.ASCI ... -
PL/SQL中用光标查询多条记录
2009-03-25 21:19 732一、 什么是光标 Oracle ... -
PL/SQL开发中动态SQL的使用方法
2009-03-25 21:11 1118一般的PL/SQL程序设计中,在DML和事务控制的语句中可 ...
相关推荐
从上述内容可以看出,Oracle培训材料的涵盖面非常广泛,不仅包括了数据库管理的专业知识,还包括了与Oracle相关的其他产品介绍,以及使用这些材料时需要遵守的法律规定。通过这些培训材料的学习,可以为成为一名合格...
这份"Oracle培训资料"显然是一份旨在帮助学习者掌握Oracle数据库系统和SQL基础知识的教程。接下来,我们将深入探讨其中涉及的关键知识点。 首先,让我们从数据库的基础开始。数据库是一个有组织地存储数据的系统,...
Oracle培训材料.pptx Oracle培训材料.pptx是关于Oracle9i数据库的培训材料,涵盖了Oracle9i数据库的安装、配置、...Oracle培训材料.pptx为学习Oracle9i数据库的安装、配置、管理和维护提供了详细的指导和参考资料。
在“清华大学计算中心oracle培训资料”中,你可以学习到Oracle数据库的基础知识,包括其核心概念、架构和管理。 1. **数据库核心概念**:Oracle数据库基于SQL语言,用于存储和管理大量结构化数据。它支持事务处理、...
这份"Oracle培训资料2"包含了一系列的PPT文件,如TP7至TP9,很可能是一次完整的Oracle技术讲解课程。下面,我们将深入探讨这些文件可能涵盖的重要Oracle知识点。 1. **Oracle数据库基础**:培训可能从Oracle数据库...
这份"Oracle培训资料(整理版)"包含了丰富的知识内容,特别是对于分析函数和Oracle内置函数的深入探讨,对于初学者和进阶者来说都是宝贵的学习资源。 一、Oracle分析函数 分析函数是Oracle数据库中的一种高级查询...
这份"Oracle培训资料1"包含了一系列PPT文件,可能是为了系统地介绍Oracle的核心概念、功能以及操作技巧。以下是根据这些文件名推测出的一些可能涵盖的知识点: 1. **基础理论** (TP1.ppt) - 数据库概述:讲解什么...
【Oracle培训资料详解】 Oracle,全球知名的数据库管理系统,是企业级数据存储与管理的重要工具。在清华大学计算中心的Oracle培训资料中,涵盖了Oracle数据库的基础知识、安装配置、管理操作、性能优化以及高级特性...
【Oracle培训资料详解】 Oracle,作为全球领先的数据库管理系统,被广泛应用于企业和组织的数据存储与管理。这份“清华大学计算中心ORACLE培训资料”是学习Oracle数据库技术的重要资源,它由清华大学计算中心精心...
清华大学作为国内顶级学府,其Oracle培训资料无疑涵盖了这个领域的核心知识和实践经验。以下将详细介绍这些资料可能涉及的关键知识点。 1. **Oracle基础知识**:首先,资料可能包括Oracle数据库的基本概念,如...
清华大学的ORACLE培训资料全面涵盖了Oracle的核心概念、设计原理、管理操作以及实际应用等多个方面,对于学习和深入理解Oracle数据库至关重要。 一、Oracle数据库基础 Oracle数据库基于SQL语言,用于存储、管理和...
在Oracle数据库培训材料中,主要涵盖了以下几个核心知识点: 1. **Oracle服务器体系结构**:Oracle服务器是一个数据库管理系统,它包含了一个Oracle实例和一个Oracle数据库。Oracle实例是访问数据库的途径,它始终...