`
lxf3339
  • 浏览: 60937 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Oracle 培训材料

阅读更多

    前段时间给公司做个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 日志写进程 41commit2,超过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,表空间,一组文件的集合

2Oracle数据类型

   1number 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 serverupdate的不一样),两个表关联查询取出数据,然后更新

 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');

 

 这里有inout,in out三钟参数类型,out的值可以传出,in out可以传入和传出

 

 包介绍(重载)

   包声明

   包主体

 

 游标使用

   显式游标和隐式游标

   游标的属性有四种,分别是SQL %ISOPENSQL %FOUNDSQL%NOTFOUNDSQL %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替换,非null12,null11

   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;

 

这里有thenelsifend if;

 

case函数

CASE <expression>

   WHEN <result1> THEN

      <statements1>;

   WHEN <result2> THEN

      <statements2>;

    ...

   ELSE

      <statements_else>;

END CASE;

分享到:
评论

相关推荐

    oracle 培训材料

    从上述内容可以看出,Oracle培训材料的涵盖面非常广泛,不仅包括了数据库管理的专业知识,还包括了与Oracle相关的其他产品介绍,以及使用这些材料时需要遵守的法律规定。通过这些培训材料的学习,可以为成为一名合格...

    oracle培训资料

    这份"Oracle培训资料"显然是一份旨在帮助学习者掌握Oracle数据库系统和SQL基础知识的教程。接下来,我们将深入探讨其中涉及的关键知识点。 首先,让我们从数据库的基础开始。数据库是一个有组织地存储数据的系统,...

    oracle培训材料.pptx

    Oracle培训材料.pptx Oracle培训材料.pptx是关于Oracle9i数据库的培训材料,涵盖了Oracle9i数据库的安装、配置、...Oracle培训材料.pptx为学习Oracle9i数据库的安装、配置、管理和维护提供了详细的指导和参考资料。

    清华大学计算中心oracle培训资料

    在“清华大学计算中心oracle培训资料”中,你可以学习到Oracle数据库的基础知识,包括其核心概念、架构和管理。 1. **数据库核心概念**:Oracle数据库基于SQL语言,用于存储和管理大量结构化数据。它支持事务处理、...

    Oracle培训资料2

    这份"Oracle培训资料2"包含了一系列的PPT文件,如TP7至TP9,很可能是一次完整的Oracle技术讲解课程。下面,我们将深入探讨这些文件可能涵盖的重要Oracle知识点。 1. **Oracle数据库基础**:培训可能从Oracle数据库...

    oracle培训资料(整理版)

    这份"Oracle培训资料(整理版)"包含了丰富的知识内容,特别是对于分析函数和Oracle内置函数的深入探讨,对于初学者和进阶者来说都是宝贵的学习资源。 一、Oracle分析函数 分析函数是Oracle数据库中的一种高级查询...

    Oracle培训资料1

    这份"Oracle培训资料1"包含了一系列PPT文件,可能是为了系统地介绍Oracle的核心概念、功能以及操作技巧。以下是根据这些文件名推测出的一些可能涵盖的知识点: 1. **基础理论** (TP1.ppt) - 数据库概述:讲解什么...

    清华大学计算中心Oracle培训资料

    【Oracle培训资料详解】 Oracle,全球知名的数据库管理系统,是企业级数据存储与管理的重要工具。在清华大学计算中心的Oracle培训资料中,涵盖了Oracle数据库的基础知识、安装配置、管理操作、性能优化以及高级特性...

    清华大学计算中心ORACLE培训资料

    【Oracle培训资料详解】 Oracle,作为全球领先的数据库管理系统,被广泛应用于企业和组织的数据存储与管理。这份“清华大学计算中心ORACLE培训资料”是学习Oracle数据库技术的重要资源,它由清华大学计算中心精心...

    清华大学ORACLE培训资料

    清华大学作为国内顶级学府,其Oracle培训资料无疑涵盖了这个领域的核心知识和实践经验。以下将详细介绍这些资料可能涉及的关键知识点。 1. **Oracle基础知识**:首先,资料可能包括Oracle数据库的基本概念,如...

    清华大学ORACLE培训资料(全)

    清华大学的ORACLE培训资料全面涵盖了Oracle的核心概念、设计原理、管理操作以及实际应用等多个方面,对于学习和深入理解Oracle数据库至关重要。 一、Oracle数据库基础 Oracle数据库基于SQL语言,用于存储、管理和...

    Oracle 数据库培训材料(1)

    在Oracle数据库培训材料中,主要涵盖了以下几个核心知识点: 1. **Oracle服务器体系结构**:Oracle服务器是一个数据库管理系统,它包含了一个Oracle实例和一个Oracle数据库。Oracle实例是访问数据库的途径,它始终...

Global site tag (gtag.js) - Google Analytics