create or replace trigger BF_ZJ_UPDATEZJM
after update of invname on med_invbasdoc
for each row
declare
begin
dbms_output.put_line(
'update med_invbasdoc set :new.invmnecode=
(SELECT F_PINYIN(:old.invname) FROM DUAL)
when :old.pk_medinvbasdoc=:new.pk_medinvbasdoc'
);
end;
5 个解决方案
#1
你这个是输出一个语句还是? 好像没有执行你这个sql语句哟。
#2
只有输出 没有执行
#3
我是想执行这个语句,可是这段不知道能不能得到函数的值
create or replace trigger BF_ZJ_UPDATEZJM
after update of invname on med_invbasdoc
for each row
declare
begin
update med_invbasdoc set :new.invmnecode=F_PINYIN(:old.invname)
when :old.pk_medinvbasdoc=:new.pk_medinvbasdoc';
end;
本来是这样写的,可是begin .. end这段sql 总是不规范,之前触发器用的比较少,请问这段要怎样才能规范,才能让sql执行呢?谢谢
create or replace trigger BF_ZJ_UPDATEZJM
after update of invname on med_invbasdoc
for each row
declare
begin
update med_invbasdoc set :new.invmnecode=F_PINYIN(:old.invname)
when :old.pk_medinvbasdoc=:new.pk_medinvbasdoc';
end;
本来是这样写的,可是begin .. end这段sql 总是不规范,之前触发器用的比较少,请问这段要怎样才能规范,才能让sql执行呢?谢谢
#4
修改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字段
你可以测试下,看是否能够更新并且并发操作是否会出现死锁
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字段
你可以测试下,看是否能够更新并且并发操作是否会出现死锁
#5
四楼说的对
---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 you
---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 you
#1
你这个是输出一个语句还是? 好像没有执行你这个sql语句哟。
#2
只有输出 没有执行
#3
我是想执行这个语句,可是这段不知道能不能得到函数的值
create or replace trigger BF_ZJ_UPDATEZJM
after update of invname on med_invbasdoc
for each row
declare
begin
update med_invbasdoc set :new.invmnecode=F_PINYIN(:old.invname)
when :old.pk_medinvbasdoc=:new.pk_medinvbasdoc';
end;
本来是这样写的,可是begin .. end这段sql 总是不规范,之前触发器用的比较少,请问这段要怎样才能规范,才能让sql执行呢?谢谢
create or replace trigger BF_ZJ_UPDATEZJM
after update of invname on med_invbasdoc
for each row
declare
begin
update med_invbasdoc set :new.invmnecode=F_PINYIN(:old.invname)
when :old.pk_medinvbasdoc=:new.pk_medinvbasdoc';
end;
本来是这样写的,可是begin .. end这段sql 总是不规范,之前触发器用的比较少,请问这段要怎样才能规范,才能让sql执行呢?谢谢
#4
修改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字段
你可以测试下,看是否能够更新并且并发操作是否会出现死锁
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字段
你可以测试下,看是否能够更新并且并发操作是否会出现死锁
#5
四楼说的对
---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 you
---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 you