程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle SQL基礎(3)-索引/觸發器/視圖操作

Oracle SQL基礎(3)-索引/觸發器/視圖操作

編輯:Oracle教程

Oracle SQL基礎(3)-索引/觸發器/視圖操作


1.索引   a.創建   create index idx_name on fdh_client_info(name);--普通索引(單列索引)   create unique index uni_idx_id on fdh_client(id); --唯一索引   create index union_idx_name_addr on fdh_client(name, address);--聯合索引   b.查詢索引   select * from user_indexes;   select * from all_indexes;   c.重建索引   alter index idx_name rebuild online;--重建索引時不鎖表   alter index idx_name rebuild tablespace tablespace_name;--重建時指定索引存儲的表空間   d.釋放索引中無用空間   alter index idx_name deallocate unused;   e.整理索引碎片   alter index idx_name coalesce;   f.刪除索引   drop index idx_name;   2. 觸發器   以下語句學習自慕課網(http://www.imooc.com/learn/414)   a.創建語句級觸發器(沒有 for each row)   執行安全檢查:禁止在非工作時間插入員工信息     create or replace trigger security_emp before insert on emp begin     if to_char(sysdate, 'day') in ('星期六', '星期日') or          to_number(to_char(sysdate, 'hh24')) not between 9 and 17 then --9點到18點         raise_application_error(-20001, '非工作時間禁止插入新員工');     end if; end;   b.創建行級觸發器   數據檢查:漲後的工資不能比漲前少(偽記錄變量:old和:new分別表示更新前後的那一條記錄)     create or replace trigger check_salary before update on emp for each row    --行級觸發器 begin   if :new.sal < :old.sal then     raise_application_error(-20002, '漲後的工資不能比漲前少. '        || '漲後的工資:' || :new.sal || '  漲前的工資:' || :old.sal);   end if; end;    c.數據庫審計(員工漲後薪水大於6000,審計員工信息)     -- 創建薪水審計表 create table audit_emp_sal(   empno number(4, 0),   ename varchar2(10),   newsal number(7,2),   incdate date ) --創建員工測試表 create table emp_2 as select * from emp;   --數據庫審計:漲後薪水大於6000,其員工信息插入審計表 create or replace trigger do_audit_emp_sal after update on emp_2 for each row begin   if :new.sal > 6000 then     insert into audit_emp_sal          values (:new.empno, :new.ename, :new.sal, sysdate);   end if; end;   d.數據庫備份和同步     --創建備份表 create table emp_back as select * from emp; --數據庫的備份和同步(利用觸發器進行同步備份) create or replace trigger sync_emp_sal after update on emp for each row begin   update emp_back b set b.sal = :new.sal where b.empno = :new.empno; end;       3.視圖   視圖本身不包含數據,存儲的是一條select語句的查詢結果;視圖是基於若干表或視圖的邏輯表,這裡的表稱作基表,通過視圖可以查詢或修改基表的數據。   視圖分為簡單視圖和復雜視圖;簡單視圖從單表獲取數據,不包含函數和數據組,可以執行DML操作,復雜視圖相反。   a.語法   CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)]  AS subquery  [WITH CHECK OPTION [CONSTRAINT constraint]]  [WITH READ ONLY]  注:FORCE:不管基表是否存在ORACLE都會自動創建該視圖;  NOFORCE:只有基表都存在ORACLE才會創建該視圖:  alias:為視圖產生的列定義的別名;  subquery:一條完整的SELECT語句,可以在該語句中定義別名;  WITH CHECK OPTION : 插入或修改的數據行必須滿足視圖定義的約束;  WITH READ ONLY : 該視圖上不能進行任何DML操作   b.示例     create or replace view dept_statistics  (name,minsal,maxsal,avgsal)  as select d.dname,min(e.sal),max(e.sal),avg(e.sal)  from emp e,dept d  where e.deptno=d.deptno  group by d.dname;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved