今天在写一个触发器的时候遇到一个问题,因为要用到新插入表中的数据进行查询,所以就遇到了一个问题:
解决办法是在DECLARE中加上一句话:PRAGMA AUTONOMOUS_TRANSACTION
但是这样又会遇到一个问题:
解决办法是在DML语句后面加上COMMIT
附上语句如下:
CREATE OR REPLACE TRIGGER "TR_CMS_MEMBERINFO"
AFTER INSERT OR UPDATE ON MEMBERNAME
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
ROWCOUNT INTEGER;
CLTPARENTNO VARCHAR2(30);
BEGIN
SELECT COUNT(*) INTO ROWCOUNT FROM MEMBERNAME WHERE CLTNO = :NEW.CLTNO;
IF ROWCOUNT > 0 THEN
BEGIN
BEGIN
SELECT CLTNO INTO CLTPARENTNO FROM MEMBERNAME WHERE ID = :NEW.PARENT_ID;
EXCEPTION WHEN NO_DATA_FOUND THEN
CLTPARENTNO := NULL;
END;
UPDATE ZKNMEMBER SET PARENTNO = CLTPARENTNO,LASTUPDATETIME = SYSDATE WHERE CLTNO = :NEW.CLTNO;
COMMIT;
END;
ELSE
BEGIN
BEGIN
SELECT CLTNO INTO CLTPARENTNO FROM MEMBERNAME WHERE ID = :NEW.PARENT_ID;
EXCEPTION WHEN NO_DATA_FOUND THEN
CLTPARENTNO := NULL;
END;
INSERT INTO ZKNMEMBER (CLTNO,PARENTNO,FEEMETHOD,FEEDIR1,FEEDIR2,CREATETIME,LASTUPDATETIME) VALUES (:NEW.CLTNO,CLTPARENTNO,1,1,1,SYSDATE,SYSDATE);
COMMIT;
END;
END IF;
END;
另外附上一篇关于触发器详解的博文:http://blog.csdn.net/indexman/article/details/8023740/
相关推荐
在Oracle数据库的开发过程中,PL/SQL(Procedural Language/Structured Query Language)是一种不可或缺的语言,它将SQL的查询功能与过程式编程语言的特点结合在一起,为数据库应用程序提供了解决方案。 PL/SQL是...
7. DELETE与TRUNCATE的区别:TRUNCATE操作速度快,不触发DELETE触发器,不能回滚,且不保留表的高水平线和索引。DELETE则支持回滚,可以触发触发器,适合少量删除。 8. 事务理解:事务从数据库连接或第一条SQL语句...
ROLLBACK可以回退事务,而SAVEPOINT则定义了事务中的可回退点。 11. 表结构变更:在不影响应用的情况下,添加列可使用`ALTER TABLE a ADD abc VARCHAR2(10)`,确保数据库处于静默状态。 12. 客户端连接服务器配置...
未提交的事务可以回退,已提交的则不能。 11. **添加列**:添加列可以通过`ALTER TABLE table_name ADD column_name data_type;`命令完成,但在数据库繁忙时需确保数据一致性,可能需要先停止写入操作。 12. **...
12.1.5 设置回退点 12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全性机制 13.2 ...
12.1.5 设置回退点 12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全性机制 13.2 ...
8. **错误处理和回退策略**:设计模式也涵盖了错误处理,确保状态机在遇到异常情况时能够适当地恢复或退出。 通过对这些文件的深入学习和实践,开发者能够掌握如何在StateFlow中有效地设计和实现模拟函数,从而在...
数据段(Segments)是在数据文件中分配的一组连续的空间,用于存储特定类型的数据,如数据段(Data Segment)、回退段(Rollback Segment)、临时段(Temporary Segment)。数据段由一系列的数据块组成,数据块...
12.1.5 设置回退点 12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全...
- **回退机制**:通过ROLLBACK可以回退事务,保存点允许回退到特定位置。 10. **表结构修改**: - **添加列**:在数据库应用中,可以使用`ALTER TABLE table_name ADD column_name datatype`命令在线添加列。 11...
- 通过ROLLBACK可回退未提交的事务,但已提交的事务无法回退。 12. **表结构修改**: - 在数据库运行时,为避免冲突,应先确保数据库处于静默状态,然后使用`ALTER TABLE a ADD abc`添加列。 这些面试题涵盖了...
12.1.5 设置回退点 12.2 用锁控制并发存取 12.2.1 为何加锁 12.2.2 加锁的方法 第13章 Oracle数据库的安全管理 13.1 Oracle数据库安全性概述 13.1.1 Oracle 11g的安全性体系 13.1.2 Oracle 11g的安全性机制 ...
ROLLBACK用于撤销未提交的事务,SAVEPOINT允许在事务中设定回退点。 12. 添加列:在数据库应用中,为表添加列需要确保数据库无写操作,然后使用`ALTER TABLE`语句,例如`ALTER TABLE A ADD ABC VARCHAR2(10)`。 13...
DDL语句会隐式提交事务,ROLLBACK可以回退未提交的事务,但不能回退已提交的事务。 11. **列添加**:向表A添加列abc,可以使用`ALTER TABLE a ADD abc VARCHAR2(10)`,但在生产环境中,可能需要确保数据库处于静默...
使用SQL语句 4.1 使用基本查询 4.1.1 简单查询语句 4.1.2 ...回退事务 4.3.4 只读事务 4.3.5 顺序事务 4.4 数据分组 4.4.1 分组函数 4.4.2 GROUPBY和HAVING 4.4.3 ROLLUP和...
DDL语句会隐式提交事务,ROLLBACK可以回退未提交的事务,但无法回退已提交的事务。 10. 表结构修改:添加列可通过ALTER TABLE语句完成,如`ALTER TABLE A ADD ABC VARCHAR2(10)`,但需注意在高并发环境下可能需要先...
- 性能优化:避免大范围操作,估算记录数并分批处理,以减小回退段压力。 在实际操作中,Oracle还提供了许多其他函数和特性,如聚合函数(SUM, AVG, COUNT等)、连接查询、子查询、游标、触发器等。了解并熟练掌握...
- **回退事务**: 使用`ROLLBACK`语句撤销事务中的更改。 - **设置保存点**: 使用`SAVEPOINT`语句标记事务中的某一点,以便之后可以回滚到该点。 - **只读事务**: 在事务中只能读取数据,不能修改数据。 - **顺序事务...
TRUNCATE速度快,不记录单独的删除操作,不触发触发器,不能回滚,适用于清空整个表。 9. **事务**:事务是数据库操作的基本单元,从第一条SQL语句开始,到COMMIT或ROLLBACK结束。COMMIT提交事务,使其永久化;...