51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

楼主: flyingrainball
打印 上一主题 下一主题

oracle10g基础教程(第二版)ppt

[复制链接]

该用户从未签到

41#
发表于 2009-8-10 15:25:54 | 只看该作者
3Q
回复 支持 反对

使用道具 举报

该用户从未签到

42#
发表于 2009-8-14 11:43:04 | 只看该作者
公司新的项目使用oracle,我还不会用呢,压力大啊。。。感谢LZ分享。。。
回复 支持 反对

使用道具 举报

该用户从未签到

43#
发表于 2009-9-18 12:33:50 | 只看该作者
多谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

44#
发表于 2009-9-24 10:02:02 | 只看该作者
收藏了好东西
回复 支持 反对

使用道具 举报

该用户从未签到

45#
发表于 2009-10-16 14:29:11 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

46#
发表于 2010-1-18 14:57:06 | 只看该作者
下载看看
回复 支持 反对

使用道具 举报

该用户从未签到

47#
发表于 2010-3-17 18:20:15 | 只看该作者
3Q
回复 支持 反对

使用道具 举报

该用户从未签到

48#
发表于 2010-3-21 11:15:29 | 只看该作者

sadsafsafsaf

safsaffffffffffffffffwqwfsafafasf
回复 支持 反对

使用道具 举报

该用户从未签到

49#
发表于 2010-3-30 11:20:22 | 只看该作者

ddddddddddddddd

ddddddddddddddddddddddddd
回复 支持 反对

使用道具 举报

该用户从未签到

50#
发表于 2010-5-28 22:12:39 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

51#
发表于 2010-6-22 16:01:16 | 只看该作者
下了不顶不好意思~
回复 支持 反对

使用道具 举报

该用户从未签到

52#
发表于 2010-10-19 09:42:06 | 只看该作者
thank  you
回复 支持 反对

使用道具 举报

该用户从未签到

53#
发表于 2010-10-20 10:21:26 | 只看该作者
谢谢楼主,,,多谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

54#
发表于 2010-11-30 17:16:17 | 只看该作者
谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

55#
发表于 2011-2-1 10:27:56 | 只看该作者
回复 支持 反对

使用道具 举报

该用户从未签到

56#
发表于 2011-2-28 13:12:19 | 只看该作者
谢谢啦~
回复 支持 反对

使用道具 举报

该用户从未签到

57#
发表于 2011-3-4 10:00:55 | 只看该作者
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   保存点
回复 支持 反对

使用道具 举报

该用户从未签到

58#
发表于 2011-3-4 10:04:32 | 只看该作者
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条件是否用到索引。
回复 支持 反对

使用道具 举报

该用户从未签到

59#
发表于 2011-3-4 11:05:57 | 只看该作者
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.
回复 支持 反对

使用道具 举报

该用户从未签到

60#
发表于 2011-3-4 11:57:42 | 只看该作者
最高效的删除重复记录方法 ( 因为使用了ROWID)

DELETE FROM EMP E
WHERE E.ROWID > (SELECT MIN(X.ROWID)
                   FROM EMP X
                   WHERE X.EMP_NO = E.EMP_NO);
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-28 21:42 , Processed in 0.078477 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表