2010-12-17 3 views
0

データベースのストアドプロシージャとトリガとは何ですか? ストアドプロシージャを作成するにはどうすればよいですか? 私はどのようにしてトリガーを作成できますか? これらのそれぞれの簡単な例がある場合は.please help :) 私が知っているのは、指定された制約に違反する(挿入または削除または更新)アクションがアクティブになるトリガだけですどのようにしてもよい場合は、再度コードを記述してください。データベースのストアドプロシージャとトリガ

+0

これはGoogleの仕事ではありません。検索時に、構文が異なるため、特定のデータベース(Oracleなど)と一緒に検索します。 – orangepips

+1

あなたの知識のレベルの誰かがトリガーを作成しているビジネスを持っていません。トリガは、データベースの専門家である開発者によって作成される必要があります。これは、記述が不適切な場合に大きな被害を受ける可能性があるためです。 – HLGEM

+0

@HLGEM:私は、OPがそのようなコメントでさらに良くなるとは思わない。それどころか、OPはSPとTRGが本当に何であるかを知りたいと思うので、いつでも正しく使いこなす方法を熟知したり学んだりすることはありません。 –

答えて

3

コードではストアドプロシージャをメソッドとして考えてください。特定の命令セットを実行します。

ストアドプロシージャは、通常、コード内で処理する複雑なデータセットを管理するために作成されます。

あなたは以下の手順でストアドプロシージャを作成することができます。

オラクル

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

SQL Serverの

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 Serverの

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に対して適切に動作するために小さな変更が必要な場合があります。

総計すると、トリガは主にここに示したように使用されますが、時間のかかるテーブル変更の履歴の構築、トランザクションのすべてのレコードの履歴への保存などがありますテーブル等を含む。ストアドプロシージャは、複雑なデータベースタスクを実行するために主に使用されます。複雑なデータベースタスクは、コード内で複雑すぎる場合があります。