数据库中的存储过程和触发器

时间:2010-12-17 19:51:19

标签: sql database stored-procedures triggers

数据库中的存储过程和触发器是什么意思? 我该如何创建存储过程? 我怎么能击中触发器? 如果你有这些的简单例子。请帮助:) 我所知道的只是关于触发器,如果​​(插入或删除或更新)的动作违反指定的约束但我不知道如何创建,则激活触发器,所以如果有任何示例请再次

1 个答案:

答案 0 :(得分:3)

存储过程视为代码中的方法。它运行一组特定的指令。

例如,创建

存储过程,以管理在代码中通常很难处理的复杂数据集。

您可以按照以下说明创建存储过程

<强>的Oracle

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

对于触发器,它们是在对相关表发生的动作时调用的代码集。例如,在Oracle中,没有INDENTITY列,例如SQL Server提供的。相反, Sequences Triggers 一起使用来模拟相同的内容。因此,您需要创建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正常工作。

总而言之,触发器主要用于此处所示,尽管还有许多其他可能的用途,例如建立一段时间内发生的表更改历史记录,将所有事务记录保存到历史记录表中或喜欢。存储过程主要用于执行复杂的数据库任务,这在代码中过于复杂。