1、基础环境

创建基础表:

CREATE TABLE TEST_TAB1(
ID INT,
NAME VARCHAR2(20)
);
CREATE TABLE TEST_TAB2(
ID INT,
NAME VARCHAR2(20)
);
CREATE TABLE TEST_TAB3(
ID INT,
NAME VARCHAR2(20)
);
CREATE TABLE TEST_IN_TAB(
ID INT,
NAME VARCHAR2(20)
);

插入基础数据:

INSERT INTO TEST_TAB1 VALUES(1,'TEST1');
INSERT INTO TEST_TAB1 VALUES(2,'TEST1');
INSERT INTO TEST_TAB1 VALUES(3,'TEST1'); INSERT INTO TEST_TAB2 VALUES(1,'TEST2');
INSERT INTO TEST_TAB2 VALUES(2,'TEST2');
INSERT INTO TEST_TAB2 VALUES(3,'TEST2'); INSERT INTO TEST_TAB3 VALUES(1,'TEST3');
INSERT INTO TEST_TAB3 VALUES(2,'TEST3');
INSERT INTO TEST_TAB3 VALUES(3,'TEST3'); commit;

2、SELECT 方式

注:

1、使用 t.TABLE_NAME 作为查询表;

2、EXECUTE IMMEDIATE 不会自动提交DML事务,需要显式提交(commit)。

declare
in_sql VARCHAR2(2000);
begin
for t in (SELECT TABLE_NAME FROM ALL_TABLES WHERE TABLE_NAME LIKE 'TEST_TAB%')
loop
in_sql := 'INSERT INTO TEST_IN_TAB
SELECT ID,NAME
FROM '||t.TABLE_NAME ||' WHERE ID>=2';
EXECUTE IMMEDIATE in_sql;
commit;
end loop;
end;

3、嵌套表(TABLE)

注:下标从1开始,元素个数无限制

declare
type tab is table of varchar2(20);
tab_test tab;
in_sql VARCHAR2(2000);
begin
tab_test:=tab('TEST_TAB1','TEST_TAB2','TEST_TAB3');
for i in 1..tab_test.count
loop
in_sql := 'INSERT INTO TEST_IN_TAB
SELECT ID,NAME
FROM '||tab_test(i) ||' WHERE ID>=2';
EXECUTE IMMEDIATE in_sql;
commit;
end loop;
end;

4、变长数组(ARRAY)

注:下标从1开始,元素个数有限制

declare
type arr_tab is varray(10) of varchar2(20); -- varray(3) 指定最多10个元素
tab_test arr_tab;
in_sql VARCHAR2(2000);
begin
tab_test:=arr_tab('TEST_TAB1','TEST_TAB2','TEST_TAB3');
for i in 1..tab_test.count
loop
in_sql := 'INSERT INTO TEST_IN_TAB
SELECT ID,NAME
FROM '||tab_test(i) ||' WHERE ID>=2';
EXECUTE IMMEDIATE in_sql;
commit;
end loop;
end;

oracle 之 数组、嵌套表、SQL查询式 实现多表数据for循环插入指定表的更多相关文章

  1. sql 查询 一张表里面的数据 在另一张表中是否存在 和 比对两个集合中的差集和交集(原创)

    这两天在搞一个修复的小功能 需求: A表,B表,C表,日志文件 先筛选出A表和B表中都符合条件的数据,然后检查这些数据在C表中是否存在.如果不存在,就从日志中读取数据,存入C表中,如果存在,则不做操作 ...

  2. 【oracle使用笔记3】sql查询遇到的若干问题总结

    在整个开发过程中,sql查询操作的频率比较高,在不同的业务场景下会出现不同的查询需求,以下是我在项目中遇到的查询需求,总结一下. [查询一]:取查询出的第一条数据 select * from (sel ...

  3. sql 查询某个条件多条数据中最新的一条数据或最老的一条数据

    sql 查询某个条件下多条数据中最新的一条数据或最老的一条数据 test_user表结构如下: 需求:查询李四.王五.李二创建的最初时间或者最新时间 1:查询最初的创建时间: SELECT * FRO ...

  4. sql查询某段时间内的数据

    查询半小时内数据的方法 1.select * from 表名 where datediff(minute,createtime,getdate())<30 2.select * from 表名 ...

  5. SQL中如何将一个表中的某一列的数据复制到另一个表中的某一列里

    表一: SPRD PRD_NO      SPC 001                NULL 002               NULL 003               NULL ...   ...

  6. ORACLE CPU过高的sql查询

    1. 根据占用CPU高的进程号来查询这个进程执行的SQL语句: CPU过高的进程号: #首先找到CPU过高的进程号 # top -bn1 是静态找到占用最高的进程   [root@localhost ...

  7. oracle学习篇三:SQL查询

    select * from emp; --1.找出部门30的员工select * from emp where deptno = 30; --2.列出所有办事员(CLERK)的姓名,变化和部门编号se ...

  8. sql查询一列 重复的数据

    select * from 表 where num  in(select num  from 表 group by num having count(num)>1)

  9. PL/SQL 查询结果集直接修改数据

    使用t.rowid,查询可以直接在查询结果中修改提交 SELECT t.rowid,t.* from  UC_ROLE t where ROLE_NAME like '% %'

随机推荐

  1. sqlserver 各种判断是否存在(表、视图、函数、存储过程等)

    1.判断表是否存在 select * from sysobjects where id = object_id(表名) and OBJECTPROPERTY(id, N'IsUserTable') = ...

  2. C# 使用modbus 读取PLC 寄存器地址

    使用的组件Nmodbus 定义参数,全局变量: //创建modbus实体对象 private static ModbusFactory modbusFactory; private static IM ...

  3. Jenkins获取jar包的快照号

    目录 一.简介 二.脚本 一.简介 主要用于打jar包的工程,显示快照包的名字.当jar打包完成后,会在target目录中,截取快照名. 二.脚本 1.脚本return-version.sh #!/b ...

  4. 时间同步——TSN协议802.1AS介绍

    前言之前的主题TSN的发展历史和协议族现状介绍了TSN技术的缘起,最近一期的主题TSN协议导读从定时与同步.延时.可靠性.资源管理四个方面,帮助大家了解TSN协议族包含哪些子协议,以及这些子协议的作用 ...

  5. 『忘了再学』Shell基础 — 2、Shell的作用与分类

    目录 1.Shell的作用 2.Shell的分类 1.Shell的作用 Shell除了能解释用户输入的命令,将它传递给内核,还可以: 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果. 在 ...

  6. Struts拦截器设置完的值为什么在页面取不到

    Struts拦截器设置完的值为什么在页面取不到. ActionContext ac = (ActionContext) invocation.getInvocationContext(); ac.pu ...

  7. SpringBoot项目bootstrap.yml配置文件不加载

    bootstrap.yml需要引入springcloud的包才会加载 <dependency> <groupId>org.springframework.cloud</g ...

  8. 【LeetCode】1118. Number of Days in a Month 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 判断是否是闰年 日期 题目地址:https://lee ...

  9. 【LeetCode】336. Palindrome Pairs 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 HashTable 相似题目 参考资料 日期 题目地 ...

  10. 【剑指Offer】调整数组顺序使奇数位于偶数前面 解题报告(Python)

    [牛客网]调整数组顺序使奇数位于偶数前面 解题报告 标签(空格分隔): 牛客网 题目地址:https://www.nowcoder.com/questionTerminal/beb5aa231adc4 ...