数据库中的存储过程和触发器是什么意思? 我该如何创建存储过程? 我怎么能击中触发器? 如果你有这些的简单例子。请帮助:) 我所知道的只是关于触发器,如果(插入或删除或更新)的动作违反指定的约束但我不知道如何创建,则激活触发器,所以如果有任何示例请再次
答案 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正常工作。
总而言之,触发器主要用于此处所示,尽管还有许多其他可能的用途,例如建立一段时间内发生的表更改历史记录,将所有事务记录保存到历史记录表中或喜欢。存储过程主要用于执行复杂的数据库任务,这在代码中过于复杂。