oracle 如果存在主键则更新(update),否则添加新纪录(insert)怎么写。

oracle 如果存在主键则更新(update),否则添加新纪录(insert)怎么写。,第1张

Create Or Replace Procedure p_Update_Add(Pn_Id     In Number, --传入的id

                                       Ln_Code   Number, --返回码

                                       Lr_Reinfo Number) Is

Ln_Flags Number

Begin

Select Count(1) Into Ln_Flags From t_Test Where Id = Pn_Id--t_test为测试表

If Ln_Flags >0 Then

  --有一条或多条记录存在,表示主键已经存在,进行更新 *** 作

  Update t_Test Set Xxx = Xxx

  Lr_Code   := 1

  Lr_Reinfo := '进行更新'

Elsif Ln_Flags = 0 Then

  --没有记录,进行添加 *** 作

  Insert Into t_Test Values (Xx, Xxx, Xxx, Xxx)

  Lr_Code   := 2

  Lr_Reinfo := '进行新增'

Else

  Lr_Code   := -1

  Lr_Reinfo := ' *** 作失败'

End If

Exception

When Others Then

  Dbms_Output.Put_Line('出现异常')

  Rollback

End

可以使用insert触发器

create trigger tgr_tablename_insert

on tablename

for insert --插入触发

as

declare @num int

select @num = count(1) from tablename tb where tb.a = inserted.a and tb.b = inserted.b and tb.c = inserted.c

if @num >0

begin

insert.......

end

else

begin

update....

end

go

没有测试下,不知道对不对,你可以看着修改下,用的是sqlserver的语法

oracle中条件更新用case when结构,举例如下:

用法如下:

update test set column1=

(case testCond

when ' ' then 'xxx'

else yyy end )

这样就可以更具某个字段的值来更新另外一个字段了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11952252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存