数据库有多重要不需我多说
本人项目做的挺多, 不过数据库方面的项目不多.
由于金融危机, 目前没项目, 想给自己充电, 学习下oracle, 却苦于没有好的oracle的资料,
希望各位能发给我一份比较不错的oracle资料, 最好从基础开始, 然后逐渐深入的那种 呵呵
我的邮件: [email protected]先谢了

解决方案 »

  1.   

    oracle方面的知识确实很多 
    数据库编程
    sql编程
    sql语句及优化
    数据库管理
    自带函数等
      

  2.   

    ORACLE的基本语法集锦 
    -- 表 
    create table test (names varchar2(12), 
                       dates date, 
                       num   int, 
                       dou   double); 
    -- 视图 
    create or replace view vi_test as 
    select * from test; -- 同义词 
    create or replace synonym aa 
    for dbusrcard001.aa; -- 存储过程 
    create or replace produce dd(v_id in employee.empoy_id%type) 
    as 
    begin 
        
    end 
    dd; -- 函数 
    create or replace function ee(v_id in employee%rowtype) return varchar(15) 
    is 
    var_test varchar2(15); 
    begin 
      return var_test; 
    exception when others then 
        
    end -- 三种触发器的定义 
    create or replace trigger ff 
    after delete 
    on test 
    for each row 
    declare 
    begin 
       delete from test; 
       if sql%rowcount  < 0 or sql%rowcount is null then 
          rais_replaction_err(-20004,"错误") 
       end if 
    end 
    create or replace trigger gg 
    after insert 
    on test 
    for each row 
    declare 
    begin 
       if :old.names = :new.names then 
          raise_replaction_err(-2003,"编码重复"); 
       end if 
    end 
    create or replace trigger hh 
    after update 
    on test 
    for each row 
    declare 
    begin 
      if updating then 
         if :old.names  <> :new.names then 
     reaise_replaction_err(-2002,"关键字不能修改") 
         end if 
      end if 
    end  
    --同时三种触发器
    create or replace trigger tr 
    before update or delete or insert 
    on t
    for each row
    begin
    if inserting then
    insert into tt values(:new.id,:new.name,:new.age,to_char(sysdate,'yyyy'),'insert',user);
    elsif updating then
    insert into tt values(:new.id,:new.name,:new.age,to_char(sysdate,'yyyy'),'update',user);
    elsif deleting then
    insert into tt values(:new.id,:new.name,:new.age,to_char(sysdate,'yyyy'),'delete',user);
    end if;
    end;--触发器例子
      CREATE OR REPLACE TRIGGER temp_aiur 
      AFTER INSERT OR UPDATE ON TEMP 
      FOR EACH ROW 
      BEGIN 
          CASE 
          WHEN inserting THEN 
              dbms_output.put_line 
                  ('executing temp_aiur - insert'); 
          WHEN updating THEN 
              dbms_output.put_line 
                  ('executing temp_aiur - update'); 
          END CASE; 
      END;
    -- 定义游标 
    declare 
       cursor aa is 
          select names,num from test; 
    begin 
       for bb in aa 
       loop 
            if bb.names = "ORACLE" then 
             
            end if 
       end loop; 
        
    end --另外一个游标的例子
      DELCARE 
      CURSOR C_EMP IS SELECT empno,ename,salary 
      FROM emp 
      WHERE salary>2000 
      ORDER BY ename; 
      ........ 
      BEGIN 打开游标 
    使用游标中的值之前应该首先打开游标,打开游标初始化查询处理。打开游标的语法是: 
      OPEN cursor_name 
        cursor_name是在声明部分定义的游标名。 
      
    例: 
      OPEN C_EMP; 
    关闭游标 
    语法: 
      CLOSE cursor_name 
    例: 
      CLOSE C_EMP; 
    -- 速度优化,前一语句不后一语句的速度快几十倍 
    select names,dates  
    from test,b 
    where test.names = b.names(+) and 
          b.names is null and 
          b.dates > date('2003-01-01','yyyy-mm-dd')   
    select names,dates 
    from test  
    where names not in ( select names  
                           from b 
                          where dates > to_date('2003-01-01','yyyy-mm-dd')) 
                            -- 查找重复记录 
    select names,num  
    from test  
    where rowid != (select max(rowid)  
                     from test b  
                    where b.names = test.names and 
                          b.num = test.num) 
    -- 查找表TEST中时间最新的前10条记录 
    select * from (select * from test order by dates desc) where rownum  < 11 -- 序列号的产生 
    create sequence row_id 
    minvalue 1 
    maxvalue 9999999999999999999999 
    start with 1 
    increment by 1 insert into test values(row_id.nextval,....)  
    当前序列号row_id.currentval
    下一个序列号row_id.nextval二:存储过程与函数的区别 
    1、函数的作用在于计算,存储过程的作用在于操作。 
    2、函数必须有返回值,存储过程不必。 
    3、存储过程是命令可以直接执行,  而函数是表达式的一部分必须是被调用, 
    比如 
    select max(NAME) FROM T 
    但是不能 exec max(NAME),因为max是函数。 三:unix的基本命令(与数据库有关)。 
    cd, ls,mkdir, 
    compress   //压缩 
    uncompress   //解压缩 
    bdf   //查看数据文件 
    crontab -l    //查看定时job 
    ps  -ef  |  grep  关键词 //查看特定进程,关键词一般为终端名或进程名 
    Kill 进程号 -9          // 
    tar -cvfp 打包的文件名 要打包的目录 
    另外还有grep/top/echo/date等,其他的命令和具体的参数,你可以再查一查。四:oracle的临时表
    ORACLE的临时表在应用系统中有很大的作用,它可以让用户只能够操作各自的数据中而互不干扰,不用担心会破坏或影响其他SESSION/TRANSACTION的数据,这也是数据安全的一种解决方法     临时表分为SESSION、TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION;而TRANSACTION级的临时表数据在TRANACTION结束后消失,即COMMIT/ROLLBACK或结束SESSION都会清除TRANACTION临时表数据。     两种临时表的语法:     create global temporary table 临时表名 on commit preserve|delete rows 
        用preserve时就是SESSION级的临时表,用delete就是TRANSACTION级的临时表     例:1、SESSION级临时表     --建立临时表 create global temporary table temp_tbl(col_a varchar2(30)) 
        on commit preserve rows     --插入数据     insert into temp_tbl values('test session table')     --提交 commit     --查询数据     select *from temp_tbl     可以看到数据'test session table'记录还在     --结束SESSION,重新登录,再查询数据select *from temp_tbl,这时候记录已不存在,因为系统在结束SESSION时自动清除记录     2、TRANSACTION级临时表     --建立临时表 create global temporary table temp_tbl(col_a varchar2(30)) 
    on commit delete rows     --插入数据     insert into temp_tbl values('test transaction table')     --提交 
        commit 
        --查询数据     select *from temp_tbl     这时候可以看到刚才插入的记录'test transaction table'已不存在了;同样,如果不提交而直接结束SESSION,重新登录记录也不存在。
      

  3.   

    导入导出基本语法和实例:
        1、EXP:
           有三种主要的方式(完全、用户、表)
           1、完全:
              EXP  SYSTEM/MANAGER   BUFFER=64000  FILE=C:\FULL.DMP  FULL=Y
              如果要执行完全导出,必须具有特殊的权限
           2、用户模式:
              EXP  SONIC/SONIC     BUFFER=64000  FILE=C:\SONIC.DMP  OWNER=SONIC
              这样用户SONIC的所有对象被输出到文件中。
           3、表模式:  
              EXP  SONIC/SONIC     BUFFER=64000  FILE=C:\SONIC.DMP  OWNER=SONIC TABLES=(SONIC)
              这样用户SONIC的表SONIC就被导出
        2、IMP:
           具有三种模式(完全、用户、表)
           1、完全:
              IMP SYSTEM/MANAGER  BUFFER=64000  FILE=C:\FULL.DMP  FULL=Y
           2、用户模式:
              IMP  SONIC/SONIC     BUFFER=64000  FILE=C:\SONIC.DMP  FROMUSER=SONIC  TOUSER=SONIC
              这样用户SONIC的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。
           3、表模式:
              EXP  SONIC/SONIC     BUFFER=64000  FILE=C:\SONIC.DMP  OWNER=SONIC TABLES=(SONIC) 
              这样用户SONIC的表SONIC就被导入。 查询索引键:
    select index_name,tablespace_name,initial_extent,next_extent,owner,table_name
    from all_indexes where  index_name IN ('TEST_PARTITION_I' ,'TEST_PARTITION_I1');修改用户密码
    connect / as sysdba;
    用户解锁
    ALTER USER 用户 ACCOUNT UNLOCK;
    alter  user 用户名 identified by '123456';  授权:
    grant select on user1.table1, update on user1.table1 to user2;
    grant select on user1.table2, update on user1.table2 to user2;查询新建用户
    select username
      from dba_users
     where username not in
           ('TEXT', 'RMAN_USER', 'TEST', 'SCOTT', 'TSMSYS', 'MDDATA', 'DIP',
            'DBSNMP', 'SYSMAN', 'MDSYS', 'ORDSYS', 'EXFSYS', 'DMSYS', 'WMSYS',
            'CTXSYS', 'ANONYMOUS', 'XDB', 'ORDPLUGINS', 'SI_INFORMTN_SCHEMA',
            'OLAPSYS', 'MGMT_VIEW', 'SYS', 'SYSTEM', 'OUTLN');
    查询那些用户,操纵了那些表造成了锁机 
    SELECT  s.username, 
    decode(l.type,'TM','TABLE LOCK', 
    'TX','ROW LOCK', 
    NULL) LOCK_LEVEL, 
    o.owner,o.object_name,o.object_type, 
    s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser 
    FROM v$session s,v$lock l,all_objects o 
    WHERE l.sid = s.sid 
    AND l.id1 = o.object_id(+) 
    AND s.username is NOT Null 其中 TM  为表锁定  TX 为行锁定  然后执行  alter system kill session '19,1'  其中 19为s.sid,1为s.serial#  清除 数据库的锁看锁阻塞的方法是 
    SELECT (select username FROM v$session WHERE sid=a.sid) blocker, 
          a.sid, 
          'is blocking', 
          (select username FROM v$session WHERE sid=b.sid) blockee, 
          b.sid 
      FROM v$lock a, v$lock b 
    WHERE a.block = 1 
      AND b.request > 0 
      AND a.id1 = b.id1 
      AND a.id2 = b.id2 
      

  4.   

    最好的教程就是Oracle的官方文档,不过全是E文
      

  5.   

    推荐楼主先接触一下SQL和PLSQL基础教程,然后可以看看Oracle concept