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 案例的更多相关文章

  1. Oracle中三种循环(For、While、Loop)案例

    1.ORACLE中的FOR循环用法(九九乘法表) declare i ; j ; begin .. loop ..i loop Dbms_Output.put(i||'*'||j||'='||i*j) ...

  2. 帝国CMS灵动标签e:loop

    头条调用方法 1 [e:loop={'selfinfo',5,13,0,'firsttitle=2'}]<a href="<?=$bqsr[titleurl]?>" ...

  3. Oracle PL/SQL随堂笔记总结

    1.pl/sql编程 2.存储过程 3.函数 4.触发器 5.包 6.pl/sql基础 -定义并使用变量 7.pl/sql的进阶 8.oracle的视图 1.pl/sql编程 1.理解oracle的p ...

  4. Oracle 存储过程学习

    转自:http://blog.chinaunix.net/uid-20495387-id-174394.html http://www.cnblogs.com/rootq/articles/11000 ...

  5. 灵动标签内sql语句调用

    本节来介绍帝国cms中,灵动标签中如何写数据库调用我们所要的信息.方便一些没有学习过数据库的朋友 转载请注明出处:谢寒的博客 灵动标签默认的语法 [e:loop={栏目ID/专题ID,显示条数,操作类 ...

  6. pl/sql的介绍

    为什么需要pl/sql编程? 因为使用纯的sql语句来操作数据库,有先天性的技术缺陷: 1.不能模块编程: 2.执行速度慢: 3.安全性有问题: 4.浪费带宽. pl/sql是什么? pl/sql(p ...

  7. oracle数据库学习记录(持续更新中...)

    --------------------------------------------day1------------------------------------------------- 1. ...

  8. oracle PL、SQL(概念)

    一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控制为一体的强大语言,PL/SQL不但支持更多的数据类型 ...

  9. PL/SQL一个简短的引论

    前言 文本 PL/SQL (Procedure Language,程序语言)SQL 1999主要的数据库供应商提供结构化的共同语言  PL/SQL只有支持Oracle数据库 基本的语法 多行凝视   ...

随机推荐

  1. 多线程(二)ThreadLocal

    ThreadLocal public class Demo extends Thread{ static int i = 0; public Integer getNext(){ i++; retur ...

  2. 有哪些Java性能优化方法?

    面试官:"有性能优化经验没?"  应聘者:"有一点."   面试官:"那你们从哪些方面做了优化?"   应聘者:"sql优化.JV ...

  3. Ext中defaults与fieldDefaults

    不同点:defaults       :直接子组件中的默认配置fieldDefaults:   后代组件中的默认配置 相同点:组件自己的配置中指定的值优先

  4. SQL查询,关联查询的区别 (LEFT JOIN 、LEFT OUTER JOIN、INNER JOIN)

    ), f2 ) ) ), f2 ) ) ------------------------------------------------ ','a1') ','a2') ','a3') ','a4') ...

  5. H5新增特性、方法

    1.FileReader和progress实现实时监控文件上传进度 2.HTML5新增的客户端校验 1.调用checkValidity方法进行校验 2.setCustomValidity自定义错误

  6. 真实世界的脉络].(英)戴维.多伊奇.pdf

    [真实世界的脉络].(英)戴维.多伊奇.pdf 宇宙.时间.生命.等等,如果用量子物理学.计算机科学.进化论.认识论将这些最基本而又复杂的问题纠缠在一起时,那将会是一幅什么样的图景呢?也许,我们穷尽一 ...

  7. 【linux】Can't connect to local MySQL server through socket和Plugin 'auth_socket' is not loaded报错

    真的是一次吐血的经历,弄了两个多小时才弄好. 问题1:直接登陆root用户报错 ERROR 2002 (HY000): Can't connect to local MySQL server thro ...

  8. (后端)Sql Server日期查询-SQL查询今天、昨天、7天内、30天(转)

    今天的所有数据: 昨天的所有数据: 7天内的所有数据: 30天内的所有数据: 本月的所有数据: 本年的所有数据: 查询今天是今年的第几天: select datepart(dayofyear,getD ...

  9. android adb 流程原理代码分析(一)

    由于要用到adb的知识,但是对adb啥也不了解,看了下android的代码,adb的源码在system/core/adb下面,然后网上搜下了资料,发现很多大神的源码分析,瞬间信心爆棚,把大神写的博客都 ...

  10. 使用fiddler对手机上的程序进行抓包

    用fiddler对手机上的程序进行抓包,网上有很多的资料,这里写一下来进行备用.   前提: 1.必须确保安装fiddler的电脑和手机在同一个wifi环境下 备注:如果电脑用的是台式机,可以安装一个 ...