怎样让oracle语句实现insert和update根据条件case when执行

zkshun12 2012-09-23 02:52:23
我想实现 的效果就是更新的时候判断是否有更新所必备的条件,如果没有的话则执行插入语句
逻辑就像下边的这段sql语句(注:下面的这段sql语句在else 部分是有错的)请高手指点一下 !加急件
UPDATE A cc
SET CC.role_id = '111'
WHERE cc.user_id = (CASE WHEN (SELECT cc1.role_id
FROM A cc1
WHERE cc1.user_id ='abc')
IS NOT NULL
THEN 'abc'
ELSE (INSERT INTO Acc1 VALUES ('111','abc')) NULL
END ) ;
...全文
1023 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuebo_911 2012-10-20
  • 打赏
  • 举报
回复
你能把你改好的句子拿出来看看吗 我想学习学习 上边的例子不错 还希望看看你改后的例子
zkshun12 2012-10-20
  • 打赏
  • 举报
回复
非常感谢,这个语句可以...
winer1220 2012-10-05
  • 打赏
  • 举报
回复
给你个merge into例子,改一下就可以
MERGE INTO products p
USING newproducts np
ON (p.product_id = np.product_id)
WHEN MATCHED THEN
UPDATE
SET p.product_name = np.product_name,
p.category = np.category
WHERE p.category = 'DVD'
WHEN NOT MATCHED THEN
INSERT
VALUES (np.product_id, np.product_name, np.category)


前提是一张表
zkshun12 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
SQL code

--如果更新,新增是同一个表,用merge into就可以了,如果不是用sql语句吧,例:
declare
v_count int:=0;
begin
select count(*) into v_count from A where user_id='abc';
if v_count<>0 then
update A s……
[/Quote]不用代码块儿怎么写?就是用普通的sql语句怎么写
zkshun12 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
UPDATE A cc
SET CC.role_id = '111'
WHERE cc.user_id = (CASE WHEN (SELECT cc1.role_id
FROM A cc1
WHERE cc1.user_id ='abc')
IS NOT NULL
THEN 'abc'
ELSE (INSERT INTO A cc1 VALUES ('1……
[/Quote]我忘了留空格了,正确的是这样的
而且我不想用代码块儿实现,只想用普通的sql语句
zkshun12 2012-09-25
  • 打赏
  • 举报
回复
UPDATE A cc
SET CC.role_id = '111'
WHERE cc.user_id = (CASE WHEN (SELECT cc1.role_id
FROM A cc1
WHERE cc1.user_id ='abc')
IS NOT NULL
THEN 'abc'
ELSE (INSERT INTO A cc1 VALUES ('111','abc')) NULL
END ) ;
人生无悔 2012-09-23
  • 打赏
  • 举报
回复

--如果简单点这样写,与上面的功能类似,少了个临时变量而已
begin
update A set role_id = '111' where user_id='abc';
if sql%rowcount=0 then
insert into Acc1 values('111','abc');
end if;
commit;
end;
/
人生无悔 2012-09-23
  • 打赏
  • 举报
回复

--如果更新,新增是同一个表,用merge into就可以了,如果不是用sql语句吧,例:
declare
v_count int:=0;
begin
select count(*) into v_count from A where user_id='abc';
if v_count<>0 then
update A set role_id = '111' where user_id='abc';
else
insert into Acc1 values('111','abc');
end if;
commit;
end;
/
人生无悔 2012-09-23
  • 打赏
  • 举报
回复
一般用merge into就可以了,不过没看明白你的意思,怎么更新和新增的不是同一个表

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧