forall 与 for loop 案例
create table a_tab(ver number,id number);
create table b_tab(ver number,id number);
set timing on  
DECLARE
l_add INTEGER:=0;
BEGIN
FOR i in 1..200000 LOOP
l_add:=l_add+i;
EXECUTE IMMEDIATE 'insert INTO a_tab values(:a,:b)' USING i,l_add;
END LOOP;
COMMIT;
END;
/
DECLARE
v_sql VARCHAR2(4000);
v_tablename VARCHAR2(100) := 'b_tab';
BEGIN
v_sql :='
DECLARE
TYPE r_outtab is RECORD (ver NUMBER,id NUMBER);
TYPE t_outtab is TABLE of r_outtab INDEX by BINARY_INTEGER;
v_outtab t_outtab;
v_query VARCHAR2(30000);
BEGIN
v_query := ''SELECT ver,id from a_tab '';
EXECUTE IMMEDIATE v_query bulk collect INTO v_outtab;
forall i in v_outtab.FIRST .. v_outtab.LAST
INSERT INTO '|| v_tablename ||' VALUES v_outtab(i);
END;';
DBMS_OUTPUT.PUT_LINE(v_sql);
EXECUTE IMMEDIATE v_sql;
COMMIT;
END;
/
DECLARE
TYPE r_outtab is RECORD (
ver NUMBER,
id NUMBER);
TYPE t_outtab is TABLE of r_outtab INDEX by BINARY_INTEGER;
v_outtab t_outtab;
v_tablename VARCHAR2(100);
v_query VARCHAR2(30000);
BEGIN
v_tablename := 'b_tab';
v_query := 'SELECT ver,id from a_tab ';
EXECUTE IMMEDIATE v_query bulk collect INTO v_outtab;
FOR i in v_outtab.FIRST .. v_outtab.LAST LOOP
EXECUTE IMMEDIATE 'INSERT INTO ' || v_tablename || ' VALUES(:a,:b)' USING v_outtab(i).ver,v_outtab(i).id;
END LOOP;
END;
/
---forall 中使用execute immediate动态执行则报错。原因为非sql类型,动态PLSQL,但本人在11.2.0.3中运行并没有报错,记录下。
declare  
     type r_outtab is record (ver NUMBER,id NUMBER);  
     type t_outtab is table of r_outtab index by binary_integer;  
     v_outtab t_outtab;  
     v_query varchar2(30000);  
     v_tablename varchar2(100):='a_tab';  
begin  
     v_query :='select ver,id from b_tab ' ;  
     execute immediate v_query  bulk collect into  v_outtab;  
     forall i in v_outtab.first .. v_outtab.last  
       execute immediate 'insert into '||v_tablename||' values (:a,:b)' using v_outtab(i).ver,v_outtab(i).id ;  
end;
/
ERROR at line 12:
ORA-06550: line 12, column 10:
PLS-00435: DML statement without BULK In-BIND cannot be used inside FORALL
/*表名动态,后面全要拼凑,因为那个集合是非sql类型的集合,无法拼凑的,用||是不行的,用using当然也不行,using必须要求sql类型*/
forall 与 for loop 案例的更多相关文章
- Oracle中三种循环(For、While、Loop)案例
		
1.ORACLE中的FOR循环用法(九九乘法表) declare i ; j ; begin .. loop ..i loop Dbms_Output.put(i||'*'||j||'='||i*j) ...
 - 帝国CMS灵动标签e:loop
		
头条调用方法 1 [e:loop={'selfinfo',5,13,0,'firsttitle=2'}]<a href="<?=$bqsr[titleurl]?>" ...
 - Oracle PL/SQL随堂笔记总结
		
1.pl/sql编程 2.存储过程 3.函数 4.触发器 5.包 6.pl/sql基础 -定义并使用变量 7.pl/sql的进阶 8.oracle的视图 1.pl/sql编程 1.理解oracle的p ...
 - Oracle 存储过程学习
		
转自:http://blog.chinaunix.net/uid-20495387-id-174394.html http://www.cnblogs.com/rootq/articles/11000 ...
 - 灵动标签内sql语句调用
		
本节来介绍帝国cms中,灵动标签中如何写数据库调用我们所要的信息.方便一些没有学习过数据库的朋友 转载请注明出处:谢寒的博客 灵动标签默认的语法 [e:loop={栏目ID/专题ID,显示条数,操作类 ...
 - pl/sql的介绍
		
为什么需要pl/sql编程? 因为使用纯的sql语句来操作数据库,有先天性的技术缺陷: 1.不能模块编程: 2.执行速度慢: 3.安全性有问题: 4.浪费带宽. pl/sql是什么? pl/sql(p ...
 - oracle数据库学习记录(持续更新中...)
		
--------------------------------------------day1------------------------------------------------- 1. ...
 - oracle PL、SQL(概念)
		
一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控制为一体的强大语言,PL/SQL不但支持更多的数据类型 ...
 - PL/SQL一个简短的引论
		
前言 文本 PL/SQL (Procedure Language,程序语言)SQL 1999主要的数据库供应商提供结构化的共同语言 PL/SQL只有支持Oracle数据库 基本的语法 多行凝视 ...
 
随机推荐
- 如何使用@vue/cli 3.0在npm上创建,发布和使用你自己的Vue.js组件库
			
译者按: 你可能npm人家的包过成千上万次,但你是否有创建,发布和使用过自己的npm包? 原文: How to create, publish and use your own VueJS Compo ...
 - jquery - append prepend after before  animate  clearQueue stop
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - es6 语法 (Proxy和Reflect 的对比)
			
{ //原始对象 let obj={ time:'2017-03-11', name:'net', _r:123 }; //(代理商)第一个参数代理对象,第二个参数真正代理的东西 let monito ...
 - Vue2+VueRouter2+webpack 构建项目实战(三):配置路由,运行页面
			
制作.vue模板文件 通过前面的两篇博文的学习,我们已经建立好了一个项目.问题是,我们还没有开始制作页面.下面,我们要来做页面了. 我们还是利用 http://cnodejs.org/api 这里公开 ...
 - 使用FileReader接口读取文件内容
			
如果想要读取或浏览文件,则需要通过FileReader接口,该接口不仅可以读取图片文件,还可以读取文本或二进制文件,同时,根据该接口提供的事件与方法,可以动态侦察文件读取时的详细状态,接下来,我们详细 ...
 - centos 安装mysql Package: akonadi-mysql-1.9.2-4.el7.x86_64 (@anaconda)
			
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release ...
 - AI从业者需要应用的10种深度学习方法
			
https://zhuanlan.zhihu.com/p/43636528 https://zhuanlan.zhihu.com/p/43734896 摘要:想要了解人工智能,不知道这十种深度学习方法 ...
 - 详解LSTM
			
https://blog.csdn.net/class_brick/article/details/79311148 今天的内容有: LSTM 思路 LSTM 的前向计算 LSTM 的反向传播 关于调 ...
 - springboot 整合 redis
			
jedis 和 lettuce 都是用来连接 redis 的客户端,jedis 如果不使用连接池是非线程安全的,lettuce 使用 netty 线程安全且并发性能更好: springboot 2.x ...
 - 「Android」GreenDao
			
译文 版本:greenDAO 3.2.2 官网:http://greenrobot.org/greendao/ GitHub:https://github.com/greenrobot/greenDA ...