Oracle使用语句块之循环插入数据
1.业务要求:
将oracle表A的整表的数据一次性导入到表B中 , 以A_ID为外键关联.
(*******如果开发环境和实际生产环境的数据一致,而且数据量比较小情况,可以直接手动添加数据;
********实际情况: 开发环境和生产环境数据不一致, 而且开发者没有实际操作数据库的权限~所以通过提交sql脚本来生成数据)
2.实现方式:
这里用到oracle的语句块,游标,以及for循环.
3.准备工作
新建表A和B,添加序列和A表的数据
-- auto-generated definition
create table Z_A
(
ID NUMBER(10) not null
constraint Z_A_PK
primary key,
NAME VARCHAR2(50)
)
/ comment on table Z_A is '测试用表,没有实用'
/ ; -- auto-generated definition
create table Z_B
(
ID NUMBER(10) not null
constraint Z_B_PK
primary key,
NAME VARCHAR2(50),
A_NAME VARCHAR2(50),
A_ID NUMBER(10)
)
/ comment on table Z_B is '测试用表,没有实用'
/ ;
-- 序列
create sequence SEQ_Z_A
increment by 1
start with 1
maxvalue 99999
cycle
nocache;
-- 序列
create sequence SEQ_Z_B
increment by 1
start with 1
maxvalue 99999
cycle
nocache;
给表A添加一点数据:

5.SQL脚本
declare
--声明 B表序列ID
B_SEQ number(10);
--查询所有A表ID
cursor cur_A is select ID, NAME
from Z_A ;
begin for a in cur_A
loop
-- 查询B表序列ID
select SEQ_Z_B.nextval into B_SEQ from dual;
-- 插入B表数据
INSERT INTO Z_B (ID, NAME, A_NAME, A_ID)
VALUES (B_SEQ, '测试B', a.NAME, a.ID);
-- commit;
end loop;
commit;
end;
6.效果

7.总结
1.声明: declare 关键字
可以用来声明一个变量, 比如上面的 B_SEQ作为 B表序列ID,当然也可以在后面的for里面直接使用 SEQ_Z_B.nextval 填充赋值, 这里是示范一下变量;
具体变量使用可以网上找一下资料,有点类似编程中的定义变量, 变量的类型还有字符串类型,Table类型等;
2.游标: cursor 关键字
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。
在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。
这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率;
上面使用 cur_A将A表的ID和NAME暂时存放到游标中,在下面for循环中使用;
3.for循环:
听说有5中循环方式: Exit When、Loop、While、For(普通循环)、For(游标循环)
请参考: https://blog.csdn.net/qq_42305423/article/details/80753725
上面使用的是游标循环,有点类似编程中的foreach~
Oracle使用语句块之循环插入数据的更多相关文章
- MYSQL中创建存储过程实现向表中循环插入数据
首先在test数据库中先创建一个表test: CREATE TABLE test( ID INT PRIMARY KEY AUTO_INCREMENT ,test_name VARCHAR(20),t ...
- mysql循环插入数据
实验中经常会遇到需要多条数据的情况就想到了用SQL语句循环生成数据 DROP PROCEDURE if EXISTS test_insert; DELIMITER ;; CREATE PROCEDUR ...
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer Advanced Installer :Free for 30 da ...
- Hive通过查询语句向表中插入数据注意事项
最近在学习使用Hive(版本0.13.1)的过程中,发现了一些坑,它们或许是Hive提倡的比关系数据库更加自由的体现(同时引来一些问题),或许是一些bug.总而言之,这些都需要使用Hive的开发人员额 ...
- paginate()出来的数据怎样循环插入数据?
paginate()出来的数据怎样循环插入数据? paginate()分页如何转数组操作数据之后再转回对象? thinkphp5 model里面用toarray后怎么分页? 以上类似问题的出现,是因为 ...
- Hive通过查询语句向表中插入数据过程中发现的坑
前言 近期在学习使用Hive(版本号0.13.1)的过程中,发现了一些坑,它们也许是Hive提倡的比关系数据库更加自由的体现(同一时候引来一些问题).也许是一些bug.总而言之,这些都须要使用Hive ...
- oracle 循环插入数据
参考链接:oracle 行转列 pivot函数基本用法 --建表 --drop table SalesList; create table SalesList( keHu varchar2(20), ...
- 6-02使用SQL语句向表中插入数据
插入语句的语法: INSERT INTO 表() VALUES(值列表) 注意事项: 1:每次插入一行数据,不能只插入半行或几列数据. 2:每一个数据值的数据类型.精度和小数位数必须与相应的列匹配. ...
- mysql -- 循环插入数据到表中
备忘: 1.经搜索发现,MySql不支持直接写SQL语句实现循环插入功能. 想要实现该功能,可以用其他语言操控MySql来实现,或者用存储过程来实现(Store Procedure--SP). 2 ...
随机推荐
- 来个我一起学习Python把!!!(新手共同努力)
<初识Python> 大家好,让我们一起来学习Python,因本人也是个新手但我会把我所学的东西分享出来,并记录自己的经验学习过程,不单单是分享代码,会详细的讲解,如有错误地方希望大家指点 ...
- 【LGP5127】子异和
题目 子异和这个名字,真是思博 显然一个集合的子集异或和为,\(2^{|S|-1}\times A\),\(A\)为集合的或和 于是现在的问题变成了树链异或一个数,求树链或和 显然强行拆位是可以做的, ...
- 网络请求NSLog结果不全
碰到了两次 NSLog请求结果只有一部分 如果NSLog语句中没有汉语就可以全部输出了,不清楚原因. NSLog(@"%@",object);//这样结果是全的 NSLog(@&q ...
- EntityFrameworkCore 根据实体类自动创建数据库
1.首先新建 Asp.Net Core WebApi 项目 2.添加一下引用 : 2.1 Pomelo.EntityFrameworkCore.MySql(我用的Mysql 根据自己情况引用就行) ...
- java内存模型和垃圾回收
摘抄并用于自查 JVM内存模型 1. Java程序具体执行的过程: Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀) 由JVM中的类加载器加载各个类的字节码文 ...
- css---8 过渡属性刨析
1. transition-property 默认值为 all,表示所有可被动画的属性都表现出过渡动 可以指定多个 property 属性值: none 没有过渡动画. all 所有可被动 ...
- 阿里云启动视频云V5计划,全面赋能生态合作伙伴
9月25 - 27日,主题为数·智的2019云栖大会在杭州举行.在第三天的智能视频云专场中,阿里云研究员金戈首次对外发布视频云V5计划,释放视频IT基础设施红利,赋能生态合作伙伴,共促大视频产业发展. ...
- thinkphp 模版引擎
系统支持原生的PHP模板,而且本身内置了一个基于XML的高效的编译型模板引擎,系统默认使用的模板引擎是内置模板引擎,关于这个模板引擎的标签详细使用可以参考模版引擎部分. 内置的大理石平台检定规程模板引 ...
- thinkphp 操作绑定到类
定义 ThinkPHP3.2版本提供了把每个操作方法定位到一个类的功能,可以让你的开发工作更细化,可以设置参数ACTION_BIND_CLASS,例如: 'ACTION_BIND_CLASS' =&g ...
- AutoMapper 在你的项目里飞一会儿
先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已. 为什么要用DTO? 1.DTO更注重数据,对领域对 ...