本博客介绍一下 Oracle 批量新增数据和更新数据的 sql 写法, 业务场景是这样的, 往一张关联表里批量新增更新数据, 然后, 下面介绍一下批量新增和更新的写法:
批量新增数据
对于批量新增数据, 介绍两种方法
(1)命令窗口执行的
一种需要在命令窗口执行的, Oracle 数据库可以使用 sqlplus 或者 plsql developer 客户端软件
可以使用 sqlplus 工具登录, 进入数据库
sqlplus / as sysdba
查看用户, 可以用命令
show parameter db_name
plsql developer 也可以使用, 登录之后, 选择文件 (File)-> 新建 (New)-> 命令窗口(Command Windows)
假如要往表格 t 里写 1000 条数据, 可以用如下批处理命令:
- begin
- for i in 1 .. 1000
- loop
- execute immediate
- 'insert into t values('|| i ||')';
- end loop;
- commit;
- end;
ps: 这个 commit 提交事务, 放的位置也是有区别的, 具体可以参考我之前的博客, Oracle 体系结构学习笔记里面有涉及到
(2) SQL 窗口执行的
然后介绍 sql 窗口执行的方法, 因为命令窗口执行有时候觉得不太便利, 所以可以使用 sql 窗口的方法, 语法大致为:
insert into [表格名称](字段名称 1, 字段名称 2,...) [查询 SQL]
给个例子, sys_guid()生成 uuid 数据, sysdate 获取当前时间, 然后批量写数据, 根据查询 sql 来
- insert into t_stuff_dir_related
- (seq, dir_seq, create_date, create_man, stuff_id, t_item)
- select sys_guid(),
- 'uuidss',
- sysdate,
- 'admin',
- b.rs_id,
- a.t_item
- from t_itm_define a
- where a.is_valid =1
批量更新数据
对于批量更新的和批量新增方法类型, 同样可以用命令窗口和 sql 窗口两种方法
(1)命令窗口执行的
同样可以用如下批处理命令:
- begin
- for i in 1 .. 1000
- loop
- execute immediate
- '${更新 SQL}';
- end loop;
- commit;
- end;
(1)SQL 窗口执行的
批量更新加了 where 条件就可以
- update t_itm_rcv_stuff stuff
- set stuff.dir_seq = '${目录 SEQ}', stuff.dir_name = '${目录名称}'
- where stuff.t_item in
- (select a.t_item
- from t_itm_define a)
来源: https://www.cnblogs.com/mzq123/p/10850729.html