oracle 之 数组、嵌套表、SQL查询式 实现多表数据for循环插入指定表
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循环插入指定表的更多相关文章
- sql 查询 一张表里面的数据 在另一张表中是否存在 和 比对两个集合中的差集和交集(原创)
这两天在搞一个修复的小功能 需求: A表,B表,C表,日志文件 先筛选出A表和B表中都符合条件的数据,然后检查这些数据在C表中是否存在.如果不存在,就从日志中读取数据,存入C表中,如果存在,则不做操作 ...
- 【oracle使用笔记3】sql查询遇到的若干问题总结
在整个开发过程中,sql查询操作的频率比较高,在不同的业务场景下会出现不同的查询需求,以下是我在项目中遇到的查询需求,总结一下. [查询一]:取查询出的第一条数据 select * from (sel ...
- sql 查询某个条件多条数据中最新的一条数据或最老的一条数据
sql 查询某个条件下多条数据中最新的一条数据或最老的一条数据 test_user表结构如下: 需求:查询李四.王五.李二创建的最初时间或者最新时间 1:查询最初的创建时间: SELECT * FRO ...
- sql查询某段时间内的数据
查询半小时内数据的方法 1.select * from 表名 where datediff(minute,createtime,getdate())<30 2.select * from 表名 ...
- SQL中如何将一个表中的某一列的数据复制到另一个表中的某一列里
表一: SPRD PRD_NO SPC 001 NULL 002 NULL 003 NULL ... ...
- ORACLE CPU过高的sql查询
1. 根据占用CPU高的进程号来查询这个进程执行的SQL语句: CPU过高的进程号: #首先找到CPU过高的进程号 # top -bn1 是静态找到占用最高的进程 [root@localhost ...
- oracle学习篇三:SQL查询
select * from emp; --1.找出部门30的员工select * from emp where deptno = 30; --2.列出所有办事员(CLERK)的姓名,变化和部门编号se ...
- sql查询一列 重复的数据
select * from 表 where num in(select num from 表 group by num having count(num)>1)
- PL/SQL 查询结果集直接修改数据
使用t.rowid,查询可以直接在查询结果中修改提交 SELECT t.rowid,t.* from UC_ROLE t where ROLE_NAME like '% %'
随机推荐
- 【编程思想】【设计模式】【行为模式Behavioral】chaining_method
Python版 https://github.com/faif/python-patterns/blob/master/behavioral/chaining_method.py #!/usr/bin ...
- jQuery - 按回车键触发跳转
键盘事件有三种: keyup:按键按下去,抬上来后,事件才生效 (推荐) keydown:按键按下去就生效 keypress:与 keydown 事件类似,当按钮被按下时,会发生该事件,与 keydo ...
- minikube metrics-server HPA 自动扩缩容错误
minikube metrics-server pod 错误 启动 minikube addons enable metrics-server 之后查看 metrics-server pod 会有如下 ...
- 全网最详细的AbstractQueuedSynchronizer(AQS)源码剖析(二)资源的获取和释放
上期的<全网最详细的AbstractQueuedSynchronizer(AQS)源码剖析(一)AQS基础>中介绍了什么是AQS,以及AQS的基本结构.有了这些概念做铺垫之后,我们就可以正 ...
- 安霸pipeline简述之rgb域的处理
RGB域处理模块的详细介绍: RGB域的处理主要是demosaic,color_correction,tone_curve(类似于gamma曲线). Demosaic:此模块将bayer Patt ...
- Abp Vnext 替换Redis的实现为csredis
Host项目安装csredis的nuget包和data protect包并 移除 Microsoft.Extensions.Caching.StackExchangeRedis Microsoft.A ...
- 关于og4j漏洞修复解决方案及源码编译
最近log4j爆出重大漏洞,程序员要赶紧修复了!文末提供已经编译好的jar包. 建议最好修复到log4j-2.15.0-rc2版本,临时解决方案还是存在jndi漏洞. 打开log4j官网https:/ ...
- [BUUCTF]PWN——CmmC_Simplerop
cmcc_simplerop 附件 步骤 例行检查,32位,开启了nx保护 本地试运行一下程序,查看一下大概的情况 32位ida载入,习惯性的检索程序里的字符串,看了个寂寞,从main函数开始看程序 ...
- PMP合同选择
合同选择
- CF749B Parallelogram is Back 题解
Content 给出平行四边形的三个顶点 \((x_1,y_1),(x_2,y_2),(x_3,y_3)\),求出所有可能的第四个顶点. 数据范围:\(\forall i\in[1,3],-1000\ ...