Oracle 同表更新或插入

一、需求

现在有一张count表,存在两个字段name和count,分别记录输入的名称以及出现的次数

要求输入的名称若在表中未存在,则新增,并初始化count的值为1

若在表中已经存在,则将count值加一

二、实现

2.1 方案一

在处理前统计name出现的次数,若大于一,则修改,否则为新增

2.2 方案二

根据上面的逻辑,使用plsql实现

sql 复制代码
DECLARE
  v_count NUMBER;
  v_name char(20);
BEGIN
  v_name:='a';  

  SELECT COUNT(*)
  INTO v_count
  FROM (SELECT name, COUNT(*) as count
        FROM count
        GROUP BY name)
  WHERE name = v_name;
  
  IF v_count >= 1 THEN
    UPDATE count
    SET count = count + 1
    WHERE name = v_name;
  ELSE
    INSERT INTO count values(v_name,1);
  END IF;
END;

更新:此时往表中插入一条已经存在的name a,只需修改v_name 的值为'a'

新增:此时往表中插入一条不存在的name c,修改v_name 的值为'c'

2.3 方案三

根据上面的逻辑,使用merge into实现

sql 复制代码
merge into count c1
using ( select count(*) count from count c2 where c2.name = 'a' ) c3
on (c3.count > 0)
when matched then
    update set c1.count = c1.count + 1 where c1.name = 'a'
when not matched then
    insert values('a',1) ;

现在清空数据表,新增一行数据a

再次点击执行,则执行修改逻辑

三、参考

merge into 对同一张表进行更新和插入_oracle merge同表-CSDN博客

PLSQL 基础语法(二) - 掘金 (juejin.cn)

相关推荐
叫我:松哥8 分钟前
基于Flask开发的智能招聘平台,集成了AI匹配引擎、数据预测分析和可视化展示功能
人工智能·后端·python·信息可视化·自然语言处理·flask·推荐算法
IT_陈寒8 分钟前
Java开发者必知的5个性能优化技巧,让应用速度提升300%!
前端·人工智能·后端
牧小七11 分钟前
springboot配置maven激活配置文件
spring boot·后端·maven
nbsaas-boot12 分钟前
Go 语言中的集合体系:从语言设计到工程实践
开发语言·后端·golang
李日灐14 分钟前
C++STL:deque、priority_queue详解!!:详解原理和底层
开发语言·数据结构·c++·后端·stl
麦兜*18 分钟前
Spring Boot整合Swagger 3.0:自动生成API文档并在线调试
java·spring boot·后端
接着奏乐接着舞。20 分钟前
Go 一小时上手指南:从零到运行第一个程序
开发语言·后端·golang
河码匠24 分钟前
Django rest framework 自定义url
后端·python·django
JaguarJack29 分钟前
2026 年 PHP 8.4 依然重要:跳到 8.5 之前你该掌握的特性
后端·php·服务端
程序员爱钓鱼30 分钟前
Node.js 博客系统实战(一):项目需求分析
前端·后端·node.js