需求oracle写入的触发器,弱已存在有重复,则不写入

有个需求要写触发器:insertinto表1set(值1,值2)如果值1存在的话就不写入,或者以值1更新数据。要怎么写... 有个需求要写触发器:
insert into 表1set(值1,值2)
如果值1存在的话就不写入,或者以值1更新数据。
要怎么写
展开
 我来答
sxdtgsh
2013-11-29 · TA获得超过2221个赞
知道小有建树答主
回答量:913
采纳率:75%
帮助的人:805万
展开全部
-- 是这样吗,希望对你有所帮助
declare
  cou integer;
begin
  select count(*) from 表1 where 列1 = 值1;
  if   cou = 0 then
     insert into 表1(列1,列2) values (值1,值2);
  else
     update 表1 set 列2 = 值2 where 列1 = 值1;
  end if;
end;
更多追问追答
追问
我是要写insert on 表1
这样写会出现死循环吧
ORA-00036: 超过递归 SQL 级别的最大值 50
能不能在insert触发器中 终止 这次的insert(update) 不然后出现insert(update) 的死循环
追答
-- 把表名和你的列名替换一下就可以了。
create or replace trigger T_T_A before insert on T_A
for each row
declare
cou number;
begin
select count(*)
into cou
from T_A where id = :new.id;
if cou 0 then
-- 这个是直接抛出自定义异常,本次插入失败
--RAISE_APPLICATION_ERROR(-20999, to_char(:new.id) || ' 数据已存在');
-- 这个是不提示错误,直接用插入的数据更新已存在的数据
update t_a set czje = :new.czje where id = :new.id;
end if;
end;
xcxyyg
2013-11-29
知道答主
回答量:1
采纳率:0%
帮助的人:1431
展开全部
create or replace trigger testAA before update on 表1
for each row
declare cnt number;
begin
select count(*) into : cnt from 表1 where 列1 = 值1;
if cou = 0 then
insert into 表1(列1,列2) values (值1,值2);
else
update 表1 set 列2 = 值2 where 列1 = 值1;
end if;
end;
追问
我是要写insert on 表1.。
这样写会出现死循环吧
ORA-00036: 超过递归 SQL 级别的最大值 50
能不能在insert触发器中 终止 这次的insert 不然后出现insert(update) 的死循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangxiaodi7428
2013-11-29 · TA获得超过313个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:94.7万
展开全部
从大神那学的用merge()方法
比触发器简单 去查一下merge方法吧 很有用的
追问
具体针对我这个需求要怎么写,不懂啊
追答
自己去搜merge()的用法,看看语法和例子就知道怎么用了
当时大神也是只给了一个方法名,剩下的就靠自己了
自己研究一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式