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使用语句块之循环插入数据的更多相关文章

  1. MYSQL中创建存储过程实现向表中循环插入数据

    首先在test数据库中先创建一个表test: CREATE TABLE test( ID INT PRIMARY KEY AUTO_INCREMENT ,test_name VARCHAR(20),t ...

  2. mysql循环插入数据

    实验中经常会遇到需要多条数据的情况就想到了用SQL语句循环生成数据 DROP PROCEDURE if EXISTS test_insert; DELIMITER ;; CREATE PROCEDUR ...

  3. 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 ...

  4. Hive通过查询语句向表中插入数据注意事项

    最近在学习使用Hive(版本0.13.1)的过程中,发现了一些坑,它们或许是Hive提倡的比关系数据库更加自由的体现(同时引来一些问题),或许是一些bug.总而言之,这些都需要使用Hive的开发人员额 ...

  5. paginate()出来的数据怎样循环插入数据?

    paginate()出来的数据怎样循环插入数据? paginate()分页如何转数组操作数据之后再转回对象? thinkphp5 model里面用toarray后怎么分页? 以上类似问题的出现,是因为 ...

  6. Hive通过查询语句向表中插入数据过程中发现的坑

    前言 近期在学习使用Hive(版本号0.13.1)的过程中,发现了一些坑,它们也许是Hive提倡的比关系数据库更加自由的体现(同一时候引来一些问题).也许是一些bug.总而言之,这些都须要使用Hive ...

  7. oracle 循环插入数据

    参考链接:oracle 行转列 pivot函数基本用法 --建表 --drop table SalesList; create table SalesList( keHu varchar2(20), ...

  8. 6-02使用SQL语句向表中插入数据

    插入语句的语法: INSERT INTO 表() VALUES(值列表) 注意事项: 1:每次插入一行数据,不能只插入半行或几列数据. 2:每一个数据值的数据类型.精度和小数位数必须与相应的列匹配. ...

  9. mysql -- 循环插入数据到表中

    备忘: 1.经搜索发现,MySql不支持直接写SQL语句实现循环插入功能. 想要实现该功能,可以用其他语言操控MySql来实现,或者用存储过程来实现(Store Procedure--SP).   2 ...

随机推荐

  1. Spring 源码学习——加载 Bean

    继上次注册 bean 之后好久没更新,这两天有空查了查资料也自己看了看 spring BeanFactory 的 getBean(beanName); 这个方法.因时间有限不能像之前那样复制代码并一行 ...

  2. 金三银四铜五铁六,Offer收到手软!

    作者:鲁班大师 来源:cnblogs.com/zhuoqingsen/p/interview.html 文中的鲁班简称LB 据说,金三银四,截止今天为止面试黄金时间已经过去十之八九,而LB恰逢是这批面 ...

  3. SparkStreaming整合Flume的pull方式之启动报错解决方案

    Flume配置文件: simple-agent.sources = netcat-source simple-agent.sinks = spark-sink simple-agent.channel ...

  4. 17-MySQL-Ubuntu-数据表的查询-分页(六)

    分页(limit) 注: (1)limit位于SQL语句的最后面; (2)limit 2; 2表示查询前两条数据; (3)limit 0,2;  0表示查询第1页的起始数据的下标,2表示每页有两条数据 ...

  5. WinDbg神断点

    https://blogs.msdn.microsoft.com/alejacma/2007/10/31/cryptoapi-tracer-script/ 我得多少年才能学会这种写法.

  6. 《数据结构与算法分析——C语言描述》ADT实现(NO.02) : 队列(Queue)

    第三个结构——队列(Queue) 队列与上次的栈相反,是一种先进先出(FIFO)的线性表.写入时只暴露尾部,读取时只暴露头部. 本次只实现了数组形式的队列.原因是链表形式的队列极为简单,只需要实现简单 ...

  7. 机器突然宕机导致hdfs启动一直超时的行为

    今天手里其中一个集群几个机器突然宕机,启动hdfs一直超时. clouder-scm-agent主要报了这个错RROR: Unexpected error 'getpwuid(): uid not f ...

  8. flutter setInitialRoute: 不生效

    概述 需要实现native跳转到flutter 指定的路由页面. iOS 工程中发现 FlutterViewController  setInitialRouter 无效,在我的需求里面是: 在iOS ...

  9. 2018-8-10-WPF-使用-Direct2D1-画图-绘制基本图形

    title author date CreateTime categories WPF 使用 Direct2D1 画图 绘制基本图形 lindexi 2018-08-10 19:16:53 +0800 ...

  10. @Formula

    @Formula  计算临时属性. 相当于可以关联查询字段,然后放在实体中当做属性使用. 任务:在User实体层,增加一个额外的属性,来获取Test表中的name字段. 1 表结构 User表 Tes ...