2010-12-17 57 views
0

數據庫中的存儲過程和觸發器意味着什麼? 我如何創建存儲過程? 我該如何頂峯觸發器? 如果你有每個這些簡單的例子。請幫助:) 我知道的只是關於觸發器,如果​​(插入或刪除或更新)的動作違反指定的限制,但我不知道如何創建,所以再次如果有任何例子請數據庫中的存儲過程和觸發器

+0

這不是Google的工作。當您搜索時,結合特定數據庫(例如Oracle)進行搜索,因爲語法會有所不同。 – orangepips 2010-12-17 19:57:14

+1

你的知識水平有人沒有創造觸發器的業務。觸發器只能由數據庫專家的開發人員創建,因爲如果寫得不好,它們可能會造成很大的傷害。 – HLGEM 2010-12-17 20:55:26

+0

@HLGEM:我真的不相信OP會收到更好的評論。相反,我認爲OP希望知道SP和TRG是什麼,所以他不會隨時瞭解或學習如何正確使用它們。 – 2010-12-18 04:30:15

回答

3

想一想存儲過程作爲您的代碼中的方法。它運行一組特定的指令。

存儲過程是爲了管理複雜的數據集而創建的,這些數據在您的代碼中通常會很難處理。

你可以創建一個存儲過程以下指示:

甲骨文

CREATE OR REPLACE PROCEDURE P_PROCEDURE_NAME (
    pParameter1 NUMBER 
    , pParameter2 VARCHAR2(100 Bytes) 
) AS 
BEGIN 
    -- Procedure code here... 
END; 

SQL服務器

CREATE PROCEDURE cspProcedureName 
    @parameter1 int 
    , @parameter2 nvarchar(100) 
AS 
    -- Procedure code here... 

甲骨文

至於觸發器,它們是調用相關表的動作時調用的代碼集合。例如,在Oracle中,不存在如SQL Server提供的INDENTITY列。相反,序列一起使用觸發器來模擬相同。因此,您需要創建一個Oracle SEQUENCE,然後使用TRIGGER來更新您的表的ID字段。

CREATE SEQUENCE SEQ_CUSTOMERS 
    MINVALUE 1 
    MAXVALUE 65535 
    START WITH 1 
    INCREMENT BY 1; 

CREATE OR REPLACE TRIGGER TRG_CUSTOMERS_INSERT 
    BEFORE INSERT 
     ON TBL_CUSTOMERS 
     FOR EACH ROW 
BEGIN 
    :NEW.CUST_ID := SEQ_CUSTOMERS.NEXTVAL; 
END; 

SQL服務器

在SQL Server中的觸發器例如將自動更新記錄的更新日期時間。考慮以下幾點:

CREATE TABLE Customers (
    CustId int NOT NULL IDENTITY(1, 1) PRIMARY KEY 
    , CustName nvarchar(100) NOT NULL 
    , CreatedOn datetime DEFAULT GETDATE() 
    , LastUpdate datetime NOT NULL 
) 
GO 

CREATE TRIGGER trgCustomersUpdt 
    AFTER UPDATE 
     ON Customers 
AS 
    update Customers 
     set LastUpdate = GETDATE() 
     where CustId = inserted.Custid 
GO 

免責聲明

此代碼尚未經過測試,並且可能需要小的改動讓它針對其各自的RDBMS正常工作。

概括起來,觸發器主要用於如圖所示這裏,儘管還有許多其他可能的用途,如建立的所發生throught時間表變動的歷史,保持交易的所有記錄成歷史桌子等。存儲過程主要用於執行復雜的數據庫任務,在代碼中這會變得太複雜。