儲存過程 檢視 觸發器 序列

CodeAgriculture發表於2013-03-27
一、儲存過程(Stored Procedure)是在大型中,一組為了完成特定功能的SQL 語句集,經編譯後儲存在資料庫中,使用者透過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。
儲存過程的優點:
1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。
3.儲存過程可以重複使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某此使用者才具有對指定儲存過程的使用權

儲存過程的種類:

1.系統儲存過程:以sp_開頭,用來進行系統的各項設定.取得資訊.相關管理工作,如 sp_help就是取得指定物件的相關資訊

2.擴充套件儲存過程   以XP_開頭,用來呼叫提供的功能exec master..xp_cmdshell 'ping 10.8.16.1'

3.使用者自定義的儲存過程,這是我們所指的儲存過程

語法

CREATE OR REPLACE procedure IOCS.SP_D_MATERIALINFOByKey
(
p_MATERIALID NVARCHAR2,
p_flag out integer
)
is
begin
    delete from MATERIALINFO where MATERIALID = p_MATERIALID;
    if SQL%FOUND then
        p_flag := 1;
    else
        p_flag := 0;
    end if;
    commit;
exception
    when no_data_found
    then
        null;
    when others
    then
        raise;
end SP_D_MATERIALINFOByKey;

二、觸發器(Trigger)
觸發器(trigger)是個特殊的,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,當對一個表進行操作( insert,delete, update)時就會啟用它執行。觸發器經常用於加強資料的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 資料字典中查到。
觸發器的優點:
觸發器可透過資料庫中的相關表實現級聯更改,不過,透過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以強制比用約 束定義的約束更為複雜的約束。與 CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的資料,以及執行其它操作,如修改資料或顯示使用者定義錯誤資訊。觸發器也可以評估資料修改前後的表狀態,並根據其差異采取對策。一個表中的 多個同類觸發器(INSERT、UPDATE 或 DELETE)允許採取多個不同的對策以響應同一個修改語句。
觸發器語法(Oracle)
CREATE OR REPLACE TRIGGER IOCS.Before_Insert
BEFORE INSERT
ON IOCS.BASEINFO
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
tmpVar NUMBER;
BEGIN
   tmpVar := 0;

   SELECT MySeq.NEXTVAL INTO tmpVar FROM dual;
   :NEW.SequenceColumn := tmpVar;
   :NEW.CreatedDate := SYSDATE;
   :NEW.CreatedUser := USER;

   EXCEPTION
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
       RAISE;
END ;


三、檢視(View):
檢視簡介:
檢視是基於一個表或多個表或檢視的邏輯表,本身不包含資料,透過它可以對錶裡面的資料進行查詢和修改。檢視基於的表稱為基表。檢視是儲存在資料字典裡的一條select語句。 透過建立檢視可以提取資料的邏輯上的集合或組合。

檢視的優點:
1.對資料庫的訪問,因為檢視可以有選擇性的選取資料庫裡的一部分。
2.使用者透過簡單的查詢可以從複雜查詢中得到結果。
3.維護資料的獨立性,試圖可從多個表檢索資料。
4.對於相同的資料可產生不同的檢視
檢視的語法:

  1. CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name   
  2.  
  3. [(alias[, alias]...)]   
  4.  
  5. AS subquery  
  6. [WITH CHECK OPTION [CONSTRAINT constraint]]   
  7. [WITH READ ONLY]   

其中:
OR REPLACE    :若所建立的試圖已經存在,ORACLE自動重建該檢視
FORCE  :不管基表是否存在ORACLE都會自動建立該檢視
NOFORCE   :只有基表都存在ORACLE才會建立該檢視
alias :為檢視產生的列定義的別名;
subquery     :一條完整的SELECT語句,可以在該語句中定義別名;
WITH CHECK  OPTION :
插入或修改的資料行必須滿足檢視定義的約束;
WITH READ ONLY :
檢視上不能進行任何DML操作。

例如:

  1. CREATE  OR  REPLACE  VIEW  dept_sum_vw  
  2.    (name,minsal,maxsal,avgsal)  
  3. AS  SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)  
  4. FROM    emp e,dept d  
  5. WHERE  e.deptno=d.deptno  
  6. GROUP  BY  d.dname;

四、序列(Sequence):

Sequence是按照一定規則自動增加的數字序列。這個序列一般作為代理主鍵(因為不會重複),沒有其他任何意義。
Sequence是的特性,有的資料庫實現了Sequence,有的則沒有。比如Oracle、DB2、PostgreSQL資料庫實現Sequence,MySQL、SQL Server、Sybase等資料庫沒有Sequence。

Sequence 語法:
定義一個seq_test,最小值為10000,最大值為99999999999999999,從20000開始,增量的步長為1,快取為20的迴圈排序Sequence。
Oracle的定義方法:
create sequence seq_test
minvalue 10000
maxvalue 99999999999999999
start with 20000
increment by 1
cache 20
cycle
order;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28699126/viewspace-757265/,如需轉載,請註明出處,否則將追究法律責任。

相關文章