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数据库 基本的语法 多行凝视 ...
随机推荐
- linux服务器重启指令
一.Linux 的五个重启命令 1.shutdown 2.poweroff 3.init 4.reboot 5.halt 二.五个重启命令的具体说明 shutdown reboot 在linux下一些 ...
- Html中的img标签 加载失败
在Http请求时,有时会遇到img图片标签加载失败,不显示的情况: 解决方法,在重新给src属性赋值时,先将onerror事件清除掉,再赋值,这样就不会存在循环调用问题了,代码如下; <img ...
- BUG -Failed to compile.
检查代码发现: 图片的路径写错了 改回正确路径页面可以正常显示
- BZOJ4407: 于神之怒加强版(莫比乌斯反演 线性筛)
Description 给下N,M,K.求 感觉好迷茫啊,很多变换看的一脸懵逼却又不知道去哪里学.一道题做一上午也是没谁了,, 首先按照套路反演化到最后应该是这个式子 $$ans = \sum_{d ...
- P3275 [SCOI2011]糖果
题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...
- 2018-05-14 代码考古-Python3官方教程字典例程
知乎原链 Data Structures中的第一个例程: >>> tel = {'jack': 4098, 'sape': 4139} >>> tel['guido ...
- iphone手机怎么录屏 两种方法任你挑选
iphone手机怎么录屏呢?苹果手机拥有独特的Airlay镜像投屏,AirPlay的工作原理是当iPhone或IPAD与支持AirPlay技术的硬件,比如Apple TV等设备处在同一个wife的情况 ...
- Python 关于类函数设计的一点总结
关于类函数设计的一点总结 by:授客 QQ:1033553122 代码1 #!/usr/bin/env python #-*-encoding:utf-8-*- __author__ = 'shouk ...
- Django Admin后台管理用户密码修改
方法一 在Terminal中执行:python manage.py changepassword your_name(其中“your_name”为你要修改密码的用户名),根据提示内容修改即可. 方法二 ...
- HBase最佳实践之Scan
一.简介 HBase中Scan从大的层面来看主要有三种常见用法:ScanAPI.TableScanMR以及SnapshotScanMR.三种用法的原理不尽相同,扫描效率当然相差甚远,最重要的是这几种用 ...