2010-12-17 42 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时间表变动的历史,保持交易的所有记录成历史桌子等。存储过程主要用于执行复杂的数据库任务,在代码中这会变得太复杂。