如何使用另一个用户的数据表,但不触发触发器?
如何使用另一个用户的数据表,但不触发触发器? 问题点数:20、回复次数:12Top
1 楼jlandzpa(jlandzpa)回复于 2002-04-20 10:16:09 得分 0
首先要看看触发器是如何写的,再想办法避免!Top
2 楼bzszp(SongZip)回复于 2002-04-20 10:38:45 得分 0
只要给这个用户赋操作另一个用户的数据表的权限就行了Top
3 楼teng(blackeyes)回复于 2002-04-20 10:50:40 得分 0
表和触发器不是在一起的吗?如何让别的用户还可用触发器,而本用户不用?Top
4 楼swjtu95(老狼)回复于 2002-04-20 10:52:29 得分 0
触发器 一触即发。
可能要修改触发器的条件来判断是新用户时不做任何动作。Top
5 楼bzszp(SongZip)回复于 2002-04-20 10:56:25 得分 0
sorry,刚才看错题目了,
楼上的方法就可以,在触发器里判断操作的用户,但我不知道怎么判断用户Top
6 楼teng(blackeyes)回复于 2002-04-20 11:12:27 得分 0
多谢各位!!Top
7 楼lthsj(晚枫)回复于 2002-04-20 23:19:31 得分 0
我想要看你做什么操作了
触发器有几种触发方式。如UPDATE,INSERT等。你对表进行数据改动了必然触发它
怎么在触发器里加判断用户我还没见过,如果作到了请告诉我Top
8 楼KingSunSha(弱水三千)回复于 2002-04-20 23:43:05 得分 0
查当前用户是不难的,用select user into cur_user from dual;就可以了
如果能hard code当前表的owner的话,这个要求一点都不难Top
9 楼teng(blackeyes)回复于 2002-04-21 09:01:00 得分 0
如果触发器原来这样写:
CREATE OR REPLACE TRIGGER "MM"."DELTOPO" AFTER DELETE
ON "TOPO"
FOR EACH ROW begin
delete from TopoBuJian where TopoBuJian.FieldTypeID=:old.FieldTypeID;
delete from TopoPort where TopoPort.FieldTypeID=:old.FieldTypeID;
delete from TopoLine where TopoLine.FieldTypeID=:old.FieldTypeID;
delete from TopoEQuery where TopoEQuery.FieldTypeID=:old.FieldTypeID;
delete from TopoPreDeal where TopoPreDeal.FieldTypeID=:old.FieldTypeI;
end;
现在用yy用户访问,不触发他,怎么改?Top
10 楼KingSunSha(弱水三千)回复于 2002-04-21 14:50:11 得分 20
CREATE OR REPLACE TRIGGER "MM"."DELTOPO" AFTER DELETE
ON "TOPO"
FOR EACH ROW
declare
cur_user varchar2(30);
begin
select user into cur_user from dual;
if cur_user = 'MM' then
delete from TopoBuJian
where TopoBuJian.FieldTypeID=:old.FieldTypeID;
delete from TopoPort
where TopoPort.FieldTypeID=:old.FieldTypeID;
delete from TopoLine
where TopoLine.FieldTypeID=:old.FieldTypeID;
delete from TopoEQuery
where TopoEQuery.FieldTypeID=:old.FieldTypeID;
delete from TopoPreDeal
where TopoPreDeal.FieldTypeID=:old.FieldTypeI;
end if;
end;
Top
11 楼teng(blackeyes)回复于 2002-04-21 19:32:58 得分 0
多谢弱水,给你分了。Top
12 楼teng(blackeyes)回复于 2002-04-21 19:39:12 得分 0
我还找到一个办法,不知行不行?
CREATE OR REPLACE TRIGGER "MM"."DELTOPO" AFTER DELETE
ON "TOPO"
FOR EACH ROW WHEN USER='MM' begin
delete from TopoBuJian where TopoBuJian.FieldTypeID=:old.FieldTypeID;
delete from TopoPort where TopoPort.FieldTypeID=:old.FieldTypeID;
delete from TopoLine where TopoLine.FieldTypeID=:old.FieldTypeID;
delete from TopoEQuery where TopoEQuery.FieldTypeID=:old.FieldTypeID;
delete from TopoPreDeal where TopoPreDeal.FieldTypeID=:old.FieldTypeI;
end;
Top




