xufei30850 发表于 2009-8-10 15:25:54

3Q

rebecca2008 发表于 2009-8-14 11:43:04

公司新的项目使用oracle,我还不会用呢,压力大啊。。。感谢LZ分享。。。

linhui1991 发表于 2009-9-18 12:33:50

多谢分享

cht11cht 发表于 2009-9-24 10:02:02

收藏了好东西

singeryoung 发表于 2009-10-16 14:29:11

谢谢分享

zhaomingchunchu 发表于 2010-1-18 14:57:06

下载看看

zllgoodluck 发表于 2010-3-17 18:20:15

3Q

adjsadjsladjlsd 发表于 2010-3-21 11:15:29

sadsafsafsaf

safsaffffffffffffffffwqwfsafafasf

whblovegod 发表于 2010-3-30 11:20:22

ddddddddddddddd

ddddddddddddddddddddddddd

xiaoyfanger 发表于 2010-5-28 22:12:39

谢谢

youer511 发表于 2010-6-22 16:01:16

下了不顶不好意思~

皱窝 发表于 2010-10-19 09:42:06

thankyou

南小木 发表于 2010-10-20 10:21:26

谢谢楼主,,,多谢分享

rosyclouds 发表于 2010-11-30 17:16:17

谢谢

he_jian 发表于 2011-2-1 10:27:56

:victory:

sixcuby 发表于 2011-2-28 13:12:19

谢谢啦~

menghang 发表于 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 intotablename(l1,l2)
values(v1,v2);         可以带&
insert into tablename(列表)
select 语句;
updatetablename
set列名1=,列名2=
where
delete fromtablename where
3. 事物控制
commit
set autocommit on
rollback
savepoint   保存点

menghang 发表于 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)        查询无效对象
Selectsubstr(object_name,1,30) object_name,object_type
from    user_objects
wherestatus ='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: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.

menghang 发表于 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 2 [3] 4
查看完整版本: oracle10g基础教程(第二版)ppt