- 浏览: 842515 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (530)
- Java编程 (64)
- C/C++/D (6)
- .Net/C# (9)
- Ruby (12)
- JavaScript (77)
- XML (1)
- JSON (1)
- Ajax (17)
- ExtJs (81)
- YUI (1)
- JQuery (7)
- DWR (1)
- HTML (7)
- CSS (7)
- Database (6)
- PowerDesigner (23)
- DB2 (2)
- Oracle (57)
- MS SQL Server (8)
- MySQL (6)
- JSP/Servlet/JSTL/TagLib (3)
- Spring (1)
- Hibernate (0)
- iText (0)
- Struts (0)
- Struts2 (0)
- iReport (0)
- FreeMarker (0)
- HttpClient (1)
- POI (6)
- FckEditor (15)
- Eclipse / MyEclipse (10)
- IntelliJ IDEA (0)
- NetBeans (0)
- Tomcat (11)
- WebLogic (1)
- Jboss (3)
- jetty (4)
- IIS (2)
- CVS/VSS (1)
- FTP (1)
- Windows/DOS (6)
- Linux/Unix (0)
- 软件建模 UML (0)
- Design Pattern & Thinking In Programming (10)
- 数据结构与算法 (12)
- 软件项目管理 (9)
- 行业应用解决方案 (3)
- 电脑软件与故障解决 (13)
- 编程语言 (1)
- 十万个为什么 (3)
- JBPM (2)
- sysbase (2)
- JDBC (8)
- Ant (2)
- Case-计算机辅助软件工程 (1)
- WebService (4)
- 浏览器 (1)
最新评论
-
gaoqiangjava:
同一楼,还请大手帮解决
JAVA读取word文件 -
hyl523:
// 判断数组中的第一个值是否未定义,如果未定义,便定义为空对 ...
javascript面向对象之二 命名空间 -
ping12132200:
ping12132200 写道我抱着个错不是因为:body标签 ...
extjs在IE报对象不支持此属性或方法 -
ping12132200:
我抱着个错不是因为:body标签内的第一个元素不能为文本tex ...
extjs在IE报对象不支持此属性或方法 -
fireinjava:
呀,不错,转走了,谢谢啦~
利用OpenOffice将word转换成PDF
在这里先解释一下推崇用存储过程代替触发器的原因,当然这里先要说明一下此概念受教于ITPUB论坛的newkid版主的经验。
直接进入正题,绝大多数的由触发器提供的功能都可以用存储过程都能实现,而触发器是“隐式”执行,存储过程是“显式”执行,也就是说,当你对一个表进行操作的时候,存储过程出现于你的程序代码中,出现问题可以被发觉,而触发器是自动执行,如果它的出现了问题,你无法在代码中找到它,因而会给造成不必要的麻烦。这就是推荐用存储过程代替触发器的主要原因。
但是,也有一些存储过程无法代替触发器的特例,如果2个表双向都有外键约束,比如t1表有b_id是t2表的b_id的外键,而t2表的a_id则同时也是t1表a_id的外键,那么用触发器可以实现2个表的数据更新,用存储过程就没有办法做的,以下是对此做的一个实验:
---------------------------建表脚本------------------------------
CREATE TABLE t1
(
a_id NUMBER PRIMARY KEY,
b_id NUMBER
);
CREATE TABLE t2
(
b_id NUMBER PRIMARY KEY,
a_id NUMBER
);
-----------------------------为2个表加上外键-----------------------------------------
ALTER TABLE t1
ADD CONSTRAINT fk1
FOREIGN KEY(b_id)
REFERENCES t2(b_id);
ALTER TABLE t2
ADD CONSTRAINT fk2
FOREIGN KEY(a_id)
REFERENCES t1(a_id);
-------------------------触发器--------------------------------
CREATE OR REPLACE TRIGGER tri_row_ins_t
after INSERT ON t1
REFERENCING NEW AS n OLD AS o
FOR EACH ROW
BEGIN
INSERT INTO t2(b_id,a_id)
VALUES(:n.b_id,:n.a_id);
END;
测试:
SQL> insert into t1 values(5,6);
1 row inserted
SQL> commit;
Commit complete
结论:触发器是在语句被编译后,约束条件被执行之前执行的,存储过程则没有办法在约束条件之前执行,所以会有这种无法使用存储过程代替触发器的特例,当然以上条件的出现情况也不常见
综上,再强调开头那一段思想,在你想到使用触发器的时候,再想一想怎样用存储过程来替代之是个比较好的习惯。
发表评论
-
oracle中怎样查询数据表的哪个字段是主键
2011-03-20 18:17 1517selecttable_name,constraint_nam ... -
ORACLE树查询,startwithconnectbyprior
2011-03-20 18:12 997[url=#author]周 登朋[/url] ([url=m ... -
java.sql.SQLException: ORA-00933: SQL command not properly ended
2010-10-08 19:16 2293java.sql.SQLException: ORA-0093 ... -
Oracle数据显示--横表转纵表
2010-10-06 11:42 11681.建表-- Create table create ta ... -
Oracle学习笔记
2010-07-28 00:30 8821、set linesize 100; 设置长度 2、se ... -
《oracle 9i从入门到精通读书笔记2》
2010-07-26 19:51 1205第二章:PL/SQL基础 2.1 PL/SQL程序结构 ... -
《Oracle9i PL/SQL 从入门到精通读书笔记1》
2010-07-26 19:51 1187Oracle9i PL/SQL 从入门到精通学习笔记 第一章: ... -
Oracle域用户安装
2010-07-05 19:43 1183问题:如果在域中安装Oracle 10G, 在DataB ... -
informix的字符串类型详解(含与oracle的对比)
2010-07-03 13:29 1738lvarchar在9.4版本之后才可以用带指定长度的方式,如l ... -
oracle的字符串类型详解
2010-07-03 13:29 1664整理一下对于char,characte ... -
Oracle学习笔记
2010-07-01 20:29 7531、set linesize 100; 设置长度 2、se ... -
Oracle数据库函数(单行函数)
2010-07-01 20:28 904Oracle数据库函数(单行函数) Oracle中的函 ... -
oracle日期函数集锦
2010-07-01 20:26 771一、 常用日期数据格式 1.Y或YY或YYY 年的最后一位, ... -
Oracle时间加减
2010-07-01 20:23 1083加法 select sysdate,add_months(s ... -
Oracle中数值的计算
2010-06-30 23:46 1128运算符 含义 · +(加) 加法 · ||(加) ... -
Oracle常见问题处理
2010-06-30 23:46 936一、Oracle的安装目录不能是中文,否则安装不成功。解决:O ... -
Oracle基础练习(三)
2010-06-30 23:45 10461、select 5/2,null*5 from dual, ... -
如何在Oracle中建表格时就指定主键和外键
2010-06-30 23:42 1507创建表的语法-创建表格语法:create table 表 ... -
Oracle触发器中when语句的用法
2010-06-30 23:41 1435案例:scott.emp表的销售员工资只能增加,不能减少 代 ... -
通过银行转账业务体会JAVA与存储过程不同实现方式
2010-06-30 23:40 1188任务:帐户表(帐户号,姓名,余额,锁定)。实现帐号1向帐号2转 ...
相关推荐
**触发器**是一种特殊的存储过程,当特定的数据库事件(如插入、更新或删除数据)发生时自动执行。触发器可以帮助维护数据库的完整性,例如在更新数据时自动检查某些约束。 #### 四、创建与使用触发器 ##### 1. ...
触发器是特殊类型的存储过程,它会在满足特定事件(如INSERT、UPDATE或DELETE)发生时自动执行。文档提到了三种触发器:insert_s、dele_s1和dele_s2。触发器分为两种类型:FOR EACH ROW(每行触发)和FOR EACH ...
- 对于复杂的业务逻辑,可以考虑使用其他机制(如存储过程)来代替触发器。 通过以上知识点的详细介绍,我们不仅理解了触发器的基本概念和用途,还具体了解了如何使用触发器来限制学生选课数量的方法和步骤,以及...
数据库触发器是数据库管理系统中一种特殊类型的存储过程,它不依赖于用户的直接调用,而是由特定的数据库操作(如INSERT、UPDATE、DELETE)自动触发执行。触发器的主要作用是增强数据库的完整性约束,实现更复杂的...
在SQL数据库管理中,触发器是一种特殊的存储过程,它在数据修改操作(如INSERT、UPDATE或DELETE)发生时自动执行,允许程序员实现复杂的业务规则和数据完整性约束。本主题将详细探讨如何批量创建和删除数据库中的...
触发器是一种特殊类型的存储过程,在数据库中作为独立对象存储。与普通存储过程不同的是,触发器不是由其他程序显式调用,而是由特定事件触发自动执行。这些事件通常包括数据表上的插入(INSERT)、更新(UPDATE)或...
触发器是一种特殊的存储过程,它可以自动执行某些操作以响应特定的事件,如INSERT、UPDATE、DELETE等。触发器可以帮助我们自动执行一些必要的操作,以确保数据的一致性和完整性。今天,我们将讨论FOR INSERT与...
触发器是一种特殊的存储过程,与特定的表紧密关联。当表中的数据发生变化时(如插入、更新或删除操作),触发器会自动执行预定义的操作。通过这种方式,触发器可以帮助维护数据的一致性和完整性,实现复杂的业务逻辑...
触发器是数据库管理系统中一种特殊类型的存储过程,它会在特定的数据库语言事件发生时自动执行。在SQL Server 2005中,主要存在两种类型的触发器:DML触发器和DDL触发器。 1. **DML触发器**(Data Manipulation ...
在SQL Server中,触发器是一种特殊的存储过程,它会在特定的数据库操作(如INSERT、UPDATE或DELETE)执行前后自动执行。`INSTEAD OF`触发器是一种特殊类型的触发器,当触发器被激活时,它会代替原本的操作,并执行...
在IT领域,数据库触发器是一种特殊类型的存储过程,它被设计为当特定事件(如数据的插入、更新或删除)发生时自动执行。本文将基于提供的文件信息,深入解析触发器的概念、工作原理以及示例代码中的具体实现,旨在...
触发器是一种特殊类型的存储过程,主要用于数据库管理系统中实现自动化的业务逻辑处理。与传统的存储过程不同,触发器不需要显式地调用,而是由特定的数据库事件(如数据插入、更新或删除等)自动触发执行。 触发器...
2. **存储性**:创建后,触发器作为数据库对象存储在数据库中。 3. **灵活性**:相比约束(如Foreign Key约束和Check约束),触发器提供更广泛的数据验证和处理能力,可以执行更复杂的逻辑。 ### 二、创建触发器 ...
触发器(Trigger)是一种特殊类型的存储过程,它是自动执行的程序块,用于对数据库中的数据操作(如INSERT、UPDATE、DELETE)进行响应。触发器可以用来增强数据的完整性约束,或者实现复杂的业务逻辑,确保数据的...
INSTEAD OF触发器的特殊之处在于它能够代替原本的数据操作(即INSERT、UPDATE、DELETE操作),这意味着可以使用INSTEAD OF触发器来执行那些由于逻辑限制无法直接在视图上执行的数据操作。它允许触发器内部代码来修改...
触发器是一种特殊类型的存储过程,它们的执行不是由用户直接发起的,而是在满足特定条件时自动触发的。SQLite的触发器可以被表或视图上的数据库事件所触发。 SQLite中的触发器使用CREATE TRIGGER语句定义。一个...