需求oracle写入的触发器,弱已存在有重复,则不写入
有个需求要写触发器:insertinto表1set(值1,值2)如果值1存在的话就不写入,或者以值1更新数据。要怎么写...
有个需求要写触发器:
insert into 表1set(值1,值2)
如果值1存在的话就不写入,或者以值1更新数据。
要怎么写 展开
insert into 表1set(值1,值2)
如果值1存在的话就不写入,或者以值1更新数据。
要怎么写 展开
3个回答
展开全部
-- 是这样吗,希望对你有所帮助
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;
展开全部
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;
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) 的死循环
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
从大神那学的用merge()方法
比触发器简单 去查一下merge方法吧 很有用的
比触发器简单 去查一下merge方法吧 很有用的
追问
具体针对我这个需求要怎么写,不懂啊
追答
自己去搜merge()的用法,看看语法和例子就知道怎么用了
当时大神也是只给了一个方法名,剩下的就靠自己了
自己研究一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询