oracle 如何用触发器实现更新刚插入的数据

oracle 如何用触发器实现更新刚插入的数据create or replace trigger tr_namebefore inserton 表for each rowbegin:new.某字段=‘新值‘;end;

修改A表的某条数据的某个字段AA(这个字段是规定好的),在保存后A表的该条数据的另一个字段BB会根据一个函数把AA字段的值处理后更新create or replace trigger BF_ZJ_UPDATEZJM   after update of aa on a for each row begin update a set bb=F_PINYIN(:new.aa) where pk_id=:old.pk_id; end;---pk_id为你表A的主键,---bb=F_PINYIN(:new.aa) 将新的aa值经过函数处理后更新BB字段 你可以测试下,看是否能够更新并且并发操作是否会出现死锁 

四楼说的对---pk_id为你表A的主键,---bb=F_PINYIN(:new.aa) 将新的aa值经过函数处理后更新BB字段 你可以测试下,看是否能够更新并且并发操作是否会出现死锁 结果是会出现 谢谢大家的帮忙现在问题已经解决了, 之前的思路想错了,如果要对同一张表操作的话,不应该用 after update  而应该是before update ,就是应该在update之前进行更改 而且这是update哪条数据 就对那条数据进行修改,所以if(:old.pk_medinvbasdoc = :new.pk_medinvbasdoc) then    :new.invmnecode := F_PINYIN(:new.invname) 就可以了 谢谢大家的帮助了,thank youhttp://bbs.csdn.net/topics/380200537
时间: 2024-08-11 13:42:39

oracle 如何用触发器实现更新刚插入的数据的相关文章

oracle 如何用触发器实现更新刚插入的数据集合

oracle 如何用触发器实现更新刚插入的数据集合 1.建立测试表 create table TEST_TB ( ID   NUMBER, WLID NUMBER, PM   VARCHAR2(100), DJZT VARCHAR2(10), SL   NUMBER, PH   VARCHAR2(100) ); 2.建立带ref cursor定义的包和包体及函数: CREATE OR REPLACE package pkg_test as /* 定义ref cursor类型 不加return类型

MySQL获取刚插入的数据

1. 通过自增的键auto_increment取得. select max(id) from tablename 这种做法需要考虑并发的情况,需要在事务中对主表加以"X锁",待获得max(id)的值以后,再解锁. 2. 使用select LAST_INSERT_ID() 方法,是线程安全的操作.使用select last_insert_id()时要注意,当一次插入多条记录时,只是获得第一次插入的id值.[自动返回最后一个INSERT或 UPDATE 查询中 AUTO_INCREMENT

Oracle 生成一张测试表并插入随机数据

1 --生成随机表 2 --CREATE table scott.One_Million as ( 3 SELECT ROWNUM AS T_ID, 4 TRUNC(DBMS_RANDOM.VALUE(0, 100)) 年龄, 5 DECODE(DBMS_RANDOM.STRING(0, 1), 6 'A', 7 '张', 8 'B', 9 '周', 10 'C', 11 '李', 12 'D', 13 '赵', 14 'E', 15 '安', 16 'F', 17 '王小', 18 '小')

mysql 获取刚插入行id汇总

mysql 获取刚插入行id汇总 我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的.但在多线程情况下,就不行了. 下面介绍三种方法 (1) getGeneratedKeys()方法: 程序片断: Connection conn = ;        Serializable ret = null;        PreparedStatement state = .;       

mysql 触发器学习(可以将mysql数据同步到redis)

1. 一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: delimiter | create trigger t_trigger before insert on t  for each row begin set @x = "hello trigger";        set NEW.s1 = 55; end; | 1.3. 如果触发器创建错误,可能只能删除了,至少我试过不能replace drop trigger t_

3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的区别,sql文件导入

 1相关术语 语句 含义 操作 DML语句 (Data Manipulation Language) 数据库操作语言 insert update delete select DDL语言 (Date definition Language) 数据库定义语言 create table;create view index sequence synonvm同义词,truncate table DCL语言 (Data control Language) 数据控制语言 commit rollback s

oracle 存储过程 ,触发器练习

/*以下代码是对emp表进行显示宽度设置 */col empno for 9999;col ename for a10;col job for a10;col mgr for 9999;col hiredate for a12;col sal for 9999;col comm for 9999;col deptno for 99;col tname for a12;set pagesize 50; //----------------------------------------------

oracle对象之触发器

触发器 数据库触发器是一个与表相关联的.存储的PL/SQL程序.每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列. 1.触发器作用 数据确认  实施复杂的安全性检查 做审计,跟踪表上所做的数据操作等 数据的备份和同步 2.触发器的类型 语句级触发器 :在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行 . 行级触发器(FOR EACH ROW) :触发语句作用的每一条记录都被触发.在行级触发器中使

Oracle 学习之触发器

1. 触发器简介 触发器是存储在数据库服务器中的程序单元,当一个表或一个视图被改变,或者数据库发生某些事件时,Oracle会自动触发触发器,并执行触发器中的代码.只有在触发器中定义的事件发生时,触发器才被触发.触发器是自动执行的代码块,和存储过程的区别在于,用户可以直接调用存储过程,而不能直接调用触发器. 触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行.即触发器是当某个事件发生时自动地隐式运行.并且,触发器不能接