51Testing软件测试论坛

标题: oracle10g基础教程(第二版)ppt [打印本页]

作者: flyingrainball    时间: 2007-12-18 11:30
标题: oracle10g基础教程(第二版)ppt
分享[attach]36121[/attach]
作者: flyingrainball    时间: 2007-12-18 11:34
[attach]36122[/attach]
作者: U2GIGN    时间: 2007-12-19 12:01
下来看看
作者: U2GIGN    时间: 2007-12-19 12:01

作者: hierarch1314    时间: 2007-12-20 15:11
下来看看
作者: hierarch1314    时间: 2007-12-20 15:16
下来看看
作者: herrylioi    时间: 2007-12-22 20:22
谢谢了啊 ~~
作者: zengfeng613    时间: 2007-12-26 16:51
谢谢!1
作者: Jair    时间: 2007-12-26 19:16
好想学~~~
下来看看
作者: mydreams    时间: 2008-1-15 21:38
Thanks!
作者: zhaojunhua530    时间: 2008-2-15 09:37
多谢分享
作者: cq0417    时间: 2008-2-20 23:02
谢谢了,下来看看。
作者: sunxun0559    时间: 2008-3-2 14:20
谢了啊
作者: godblessu    时间: 2008-3-20 14:11
内容不错,谢谢楼主共享.
作者: cyyi    时间: 2008-4-3 10:41
谢谢提供的资料,正派上用场了
作者: mli@dtri.com    时间: 2008-4-8 16:12
多谢
作者: zhaojw    时间: 2008-4-13 16:09
标题: 好材料
必须建议 给予奖励和鼓励。
作者: 李杨杨    时间: 2008-4-23 10:49
3k
作者: CCT    时间: 2008-7-16 17:25

作者: CCT    时间: 2008-7-16 17:27

作者: xiaodingdang119    时间: 2008-8-21 11:46
正在找,谢谢啦。。。
作者: lanmengxjh    时间: 2008-9-17 16:58
3KS
作者: wxssmj    时间: 2008-9-29 21:02
标题: 回复 1# 的帖子
谢谢了
作者: gexiuhao_2008    时间: 2008-10-3 09:00
谢谢楼主分享,呵呵
作者: guojinjin2006    时间: 2008-10-6 14:01
下来看看
作者: zrlcj    时间: 2008-10-6 14:34
谢谢,学习一下。
作者: littlepig8848    时间: 2008-11-25 05:51
标题: THANKS
DD
作者: hongyexiang    时间: 2009-2-25 15:58

作者: carry1986    时间: 2009-3-2 17:59
下来看看,,,,谢谢!!!
作者: Aries0409    时间: 2009-3-6 14:05
Thanks!
作者: qingfengfly    时间: 2009-3-9 17:01
谢啦  ....
作者: gggwavj    时间: 2009-3-10 13:20
谢谢提供的资料,正派上用场了
作者: dumiyue    时间: 2009-3-11 00:31
ssssssssssssssssssssssssssssssssss
作者: whyan02002    时间: 2009-4-23 16:56
下着先,~~
作者: 林欣华    时间: 2009-5-25 14:30
谢谢谢谢
作者: yxwbtb    时间: 2009-6-3 11:51
谢谢分享!
作者: muyang327    时间: 2009-6-3 13:06
正好需要,下来看看。
作者: 愚人    时间: 2009-6-28 11:40
多谢分享
作者: xiao040223    时间: 2009-6-30 13:33
3Q
作者: laipi    时间: 2009-6-30 15:50
多谢楼主
作者: xufei30850    时间: 2009-8-10 15:25
3Q
作者: rebecca2008    时间: 2009-8-14 11:43
公司新的项目使用oracle,我还不会用呢,压力大啊。。。感谢LZ分享。。。
作者: linhui1991    时间: 2009-9-18 12:33
多谢分享
作者: cht11cht    时间: 2009-9-24 10:02
收藏了好东西
作者: singeryoung    时间: 2009-10-16 14:29
谢谢分享
作者: zhaomingchunchu    时间: 2010-1-18 14:57
下载看看
作者: zllgoodluck    时间: 2010-3-17 18:20
3Q
作者: adjsadjsladjlsd    时间: 2010-3-21 11:15
标题: sadsafsafsaf
safsaffffffffffffffffwqwfsafafasf
作者: whblovegod    时间: 2010-3-30 11:20
标题: ddddddddddddddd
ddddddddddddddddddddddddd
作者: xiaoyfanger    时间: 2010-5-28 22:12
谢谢
作者: youer511    时间: 2010-6-22 16:01
下了不顶不好意思~
作者: 皱窝    时间: 2010-10-19 09:42
thank  you
作者: 南小木    时间: 2010-10-20 10:21
谢谢楼主,,,多谢分享
作者: rosyclouds    时间: 2010-11-30 17:16
谢谢
作者: he_jian    时间: 2011-2-1 10:27

作者: sixcuby    时间: 2011-2-28 13:12
谢谢啦~
作者: menghang    时间: 2011-3-4 10:00
1. 基本查询命令
select         from   tablename
     where   
                  group by     
                  having     
                  order by
where字句可使用运算符:=、<>、!=、>=、<=、in、between、like(%_)、is null   或is not null、not、or、and。
order by:asc(升序)或desc(降序),缺省升序。
group by:将查询结果分组,在包含group by 子句的查询中,select 子句的列表中的所有个体值(除聚组函数avg、count等外)必须是groub by子句中的表达式或常量。
having:如果需要对各个组返回的结果进行筛选,查询满足一定条件的分组值,可以使用having。例如:
select deptno,sum(sal)
from emp
group by deptno
having sum(sal)>9000;
2. 数据更新
insert into  tablename(l1,l2)
values(v1,v2);           可以带&
insert into tablename(列表)
select 语句;
update  tablename
set  列名1=,列名2=
where
delete from  tablename where
3. 事物控制
commit
set autocommit on
rollback
savepoint   保存点
作者: menghang    时间: 2011-3-4 10:04
3.2  如何杀掉吊死session
(1)        找出吊死session
Select sid,serial#,program,machine,lockwait from v$session;
(2)        杀死session
Svrmgrl>alter system kill session 'init1,init2';
其中init1为sid,init2为serial#。
3.3  如何修改字符集
以sys用户执行如下命令
Update props$ set value$='新字符集'
       Where ltrim(name)='NLS_CHARACTERSET';
commit;
注意:如果有数据,不要修改数据集。
3.4  如何追加表空间
以sys用户:
Alter tablespace 表空间 add datafile 文件名(带路径)size Xm;
3.5  如何加大表的maxextents值
Alter table 表名 storage(maxextents 新值)
3.6  如何查询无效对象
(1)        以sys用户登录SQL Plus
(2)        查询无效对象
Select  substr(object_name,1,30) object_name,object_type
from    user_objects
where  status ='INVALID'
(3)        恢复失效存储过程
对于存储过程,如果存储过程或函数脚本中某个表或所调用的存储过程被drop或重新编译,则此存储过程可能变为invalid,正常情况下,再次调用此存储过程时,系统会自动编译使其变为valid,也可以手工编译:Alter procedure 名称 compile;
3.7  怎样分析SQL语句是否用到索引
Oracle提供的策略分析器Explain plan能很好地分析SQL语句使用索引情况,分析步骤如下
(1)        检查当前用户下是否存在策略分析表plan_table
(2)        检查表结构是否正确(建立数据库时只有sys用户下存在此表),若没有,需要在当前用户下建此表:
CREATE TABLE PLAN_TABLE
(
STATEMENT_ID                VARCHAR2(30),
TIMESTAMP                   DATE,
REMARKS                     VARCHAR2(80),
OPERATION                   VARCHAR2(30),
OPTIONS                     VARCHAR2(30),
OBJECT_NODE               VARCHAR2(128),
OBJECT_OWNER      VARCHAR2(30),
OBJECT_NAME        VARCHAR2(30),
OBJECT_INSTANC     NUMBER(38),
OBJECT_TYPE         VARCHAR2(30),
OPTIMIZER                   VARCHAR2(255),
SEARCH_COLUMNS   NUMBER(38),
ID                    NUMBER(38),
PARENT_ID           NUMBER(38),
POSITION             NUMBER(38),
COST                 NUMBER(38),
CARDINALITY         NUMBER(38),
BYTES                NUMBER(38),
OTHER_TAG          VARCHAR2(255),
OTHER               LONG
);
(3)        执行分析语句:
sql>delete from plan_table;
sql>explain plan for
sql>select * from tab where tname like 'T%';       
sql>select object_name,options,operation from plan_table;
执行完上述三步,可查看“select * from tab where tname like 'T%'”语句where条件是否用到索引。
作者: menghang    时间: 2011-3-4 11:05
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。

    例如:

 (低效,执行时间156.3秒)

SELECT …
FROM EMP E
WHERE SAL > 50000
AND    JOB = ‘MANAGER’
AND    25 < (SELECT COUNT(*) FROM EMP
             WHERE MGR=E.EMPNO);
(高效,执行时间10.6秒)
SELECT …
FROM EMP E
WHERE 25 < (SELECT COUNT(*) FROM EMP
             WHERE MGR=E.EMPNO)
AND    SAL > 50000
AND    JOB = ‘MANAGER’;
6. SELECT子句中避免使用 ‘ * ’

 当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法。不幸的是,这是一个非常低效的方法。 实际上,ORACLE在解析的过程中, 会将‘*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。

7.减少访问数据库的次数

 当执行每条SQL语句时, ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等等。 由此可见, 减少访问数据库的次数 , 就能实际上减少ORACLE的工作量。

    例如,以下有三种方法可以检索出雇员号等于0342或0291的职员。

    方法1 (最低效)

    SELECT EMP_NAME , SALARY , GRADE
    FROM EMP
    WHERE EMP_NO = 342;
     SELECT EMP_NAME , SALARY , GRADE
    FROM EMP
    WHERE EMP_NO = 291;
方法2 (次低效)

       DECLARE
        CURSOR C1 (E_NO NUMBER) IS
        SELECT EMP_NAME,SALARY,GRADE
        FROM EMP
        WHERE EMP_NO = E_NO;
    BEGIN
        OPEN C1(342);
        FETCH C1 INTO …,..,.. ;
                OPEN C1(291);
       FETCH C1 INTO …,..,.. ;
         CLOSE C1;
      END;
方法3 (高效)

    SELECT A.EMP_NAME , A.SALARY , A.GRADE,
            B.EMP_NAME , B.SALARY , B.GRADE
    FROM EMP A,EMP B
    WHERE A.EMP_NO = 342
    AND   B.EMP_NO = 291;
 注意:

 在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200.
作者: menghang    时间: 2011-3-4 11:57
最高效的删除重复记录方法 ( 因为使用了ROWID)

DELETE FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
                   FROM EMP X
                   WHERE X.EMP_NO = E.EMP_NO);
作者: menghang    时间: 2011-3-4 13:35
count*
count1)稍快

当然如果可以通过索引检索,对索引列的计数仍旧是最快的。
例如 COUNTEMPNO

作者: menghang    时间: 2011-3-4 13:38
用Where子句替换HAVING子句

 避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤。 这个处理需要排序,总计等操作。 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。

    例如:

 低效:

     SELECT REGION,AVG(LOG_SIZE)
     FROM LOCATION
     GROUP BY REGION
     HAVING REGION REGION != ‘SYDNEY’
     AND REGION != ‘PERTH’
 高效

     SELECT REGION,AVG(LOG_SIZE)
     FROM LOCATION
     WHERE REGION REGION != ‘SYDNEY’
     AND REGION != ‘PERTH’
     GROUP BY REGION
(HAVING 中的条件一般用于对一些集合函数的比较,如COUNT() 等等。 除此而外,一般的条件应该写在WHERE子句中)
作者: menghang    时间: 2011-3-4 13:39
减少对表的查询

 在含有子查询的SQL语句中,要特别注意减少对表的查询。

    例如:

 低效

          SELECT TAB_NAME
          FROM TABLES
          WHERE TAB_NAME = ( SELECT TAB_NAME
                                FROM TAB_COLUMNS
                                WHERE VERSION = 604)
          AND DB_VER= ( SELECT DB_VER
                           FROM TAB_COLUMNS
                           WHERE VERSION = 604)

高效

          SELECT TAB_NAME
          FROM TABLES
          WHERE (TAB_NAME,DB_VER)
= ( SELECT TAB_NAME,DB_VER)
                   FROM TAB_COLUMNS
                   WHERE VERSION = 604)
    Update 多个Column 例子:

 低效:

           UPDATE EMP
           SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES),
              SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES)
           WHERE EMP_DEPT = 0020;
 高效:

          UPDATE EMP
          SET (EMP_CAT, SAL_RANGE)
          = (SELECT MAX(CATEGORY) , MAX(SAL_RANGE)
          FROM EMP_CATEGORIES)
           WHERE EMP_DEPT = 0020;
作者: menghang    时间: 2011-3-4 13:44
用IN来替换OR

    下面的查询可以被更有效率的语句替换:

    低效:

    SELECT…
    FROM LOCATION
 WHERE LOC_ID = 10
 OR     LOC_ID = 20
 OR     LOC_ID = 30

    高效:

 SELECT…
    FROM LOCATION
 WHERE LOC_IN IN
(10,20,30);

    按:这是一条简单易记的规则,但是实际的执行效果还须检验,在ORACLE8i下,两者的执行路径似乎是相同的。
作者: conquerme    时间: 2011-8-7 09:20
3x
作者: qianshi    时间: 2011-8-16 16:04
收藏了
作者: stone-石头    时间: 2011-12-9 16:07
3ks,无私啊
作者: zm5819    时间: 2011-12-12 21:25
不错  顶
作者: model_model    时间: 2011-12-16 16:13
下载了~谢谢
作者: jaa104    时间: 2012-1-4 11:10
感谢 楼主分享
作者: 928930885    时间: 2012-2-1 17:19





欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2