转:Oracle 10g批量绑定forall bulk collect

摘要:
表_数字类型_数字;表_名称(i));dbms_outputput _行('-------------------');'||to_ char((t3-t2)/100));dbms_output.new_行;删除名称:ULKCOLLECTINTOTab _ ename;
批量绑定可以通过减少在PL/SQLSQL引擎之间的上下文切换(context switches )以此提高性能。

批量绑定(Bulk binds)主要包括:

(1) Input collections, use the FORALL statement
,用来改善DMLINSERTUPDATEDELETE)操作的性能。

(2) Output collections, use BULK COLLECT clause
,用来提高查询(SELECT)的性能。

Oracle 10g
开始forall语句可以使用三种方式:

in low..up

in indices of collection取得集合元素下标的值。

in values of collection取得集合元素的值。

forall
语句还可以使用部分集合元素。

sql%bulk_rowcount(i)
表示forall语句第i元素所作用的行数。


--drop table blktest;
--CREATE TABLE blktest (num NUMBER(20), name varchar2(50
));
--CREATE OR REPLACE PROCEDURE p_bulktest
 IS
DECLARE
TYPE type_num IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
TYPE type_name IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
tab_num type_num;
tab_name type_name;
t1 NUMBER;
t2 NUMBER;
t3 NUMBER;

BEGIN
FOR i IN 1 .. 500000 LOOP
tab_num(i) := i;
tab_name(i) := 'name: ' || to_char(i);
END LOOP;

SELECT dbms_utility.get_time
   
INTO t1
   
FROM dual;

FOR i IN 1 .. 500000 LOOP
INSERT INTO blktest
      
VALUES
(tab_num(i), tab_name(i));
END LOOP;

SELECT
dbms_utility.get_time
   
INTO t2
   
FROM dual;

FORALL i IN 1 .. 500000
INSERT INTO blktest
      
VALUES
(tab_num(i), tab_name(i));

SELECT dbms_utility.get_time
   
INTO t3
   
FROM dual;

dbms_output.put_line('Execution Time(S)');
dbms_output.put_line
('-------------------');
dbms_output.put_line('FOR loop: '
|| to_char((t2 - t1) / 100));
dbms_output.put_line('FORALL:
  '
|| to_char((t3 - t2) / 100));

END;
/*
Execution Time(S)
-------------------
FOR loop: 32.78
FORALL:
  2.64
*/

/*
bulk collect
语句:
于取得批量数据,只适用于
select into ,fetch intoDML语句的返回子句
DECLARE
TYPE type_emp IS TABLE OF
scott.emp%ROWTYPE INDEX BY BINARY_INTEGER;
tab_emp type_emp;

TYPE type_ename IS TABLE OF
scott.emp.ename%TYPE INDEX BY BINARY_INTEGER;
tab_ename type_ename;
CURSOR c IS
SE
LECT *
FROM scott.emp;
BEGIN
SELECT * BULK COLLECT
INTO tab_emp
FROM scott.emp;
FOR i IN 1 .. tab_emp.COUNT LOOP
dbms_output.put_line(tab_emp(i).ename);
END LOOP;

dbms_output.new_line;
DELETE scott.emp RETURNING
ename BULK COLLECT INTO tab_ename;
FOR i
IN 1 .. tab_emp.COUNT LOOP
dbms_output.put_line(tab_emp(i).ename);
END LOOP;
ROLLBACK;

OPEN c;
FETCH c BULK COLLECT
INTO tab_emp;
dbms_output.new_line;
FOR i IN 1 .. tab_emp.COUNT LOOP
dbms_output.put_line(tab_emp(i).sal);
END LOOP;

END;
*/

============
==================


批量输入FORALL+批量输出BULK

DECLARE
--
批量输入FORALL+批量输出BULK
TYPE type_num IS TABLE OF NUMBER;
tab_1 type_num;
tab_2 type_num;
BEGIN
tab_1 := type_num(1, 2, 3);
FORALL i IN 1 .. tab_1.COUNT
--EXECUTE IMMEDIATE 'update t2 set id2=id*2
where id=
:1 returning id2 into :2'
--USING tab_1(i) RETURNING BULK COLLECT INTO tab_2;
update t2 set id2=id*2 where id=tab_1(i)
returning id2 bulk collect into tab_2;
FOR i IN 1 .. tab_2.COUNT LOOP
dbms_output.put_line(tab_2(i));
END LOOP;
END
;

免责声明:文章转载自《转:Oracle 10g批量绑定forall bulk collect》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇配置ssh免密码登录——集群学习日记数据结构---公交线路提示系统05(内附读取表格+迪杰斯特拉算法Java代码)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

wordcloud使用

学了下怎么用wordcloud。 以imet的数据集为例 https://www.kaggle.com/c/imet-2019-fgvc6 读取“train.csv”,”label.csv”文件,得到id2name[] (label的id和label名称对应) 和 attribute_count(label出现次数统计)两个dict。 importmat...

oracle系列学习----复杂查询的优化

实验数据和表 create table test1 ( FID NUMBER(6) NOT NULL, FBillNo VARCHAR2(10), FDate DATE DEFAULT to_date(to_char(SYSDATE,'yyyy-mm-dd'),'yyyy-mm-dd') ) create sequence...

视图家族之视图工具集viewsets

视图家族之视图工具集viewsets 一、视图集ViewSet 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() 保存数据 destory() 删除数据 ViewSet视图集类不再实现get()、post()等方法,而是通过重...

Tensorflow 变量的共享

    https://github.com/chenghuige/tensorflow-exp/blob/master/examples/sparse-tensor-classification/     tensorflow-exp/example/sparse-tensor-classification/train-validate.py 当你需要...

聚类之k-means附代码

   import osimport sys as sys#reload(sys)#sys.setdefaultencoding('utf-8')from sklearn.cluster import KMeansfrom sklearn import feature_extractionfrom sklearn.feature_extraction....

转载:SQL注入演示demo

网上看到的一个SQL注入的演示demo,很完整所以转载过来,分享给大家。先要感谢作者!!   作者:潘良虎链接:http://www.zhihu.com/question/22953267/answer/80141632来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Web安全简史在Web1.0时代,人们更多是关注服务器端...