远丰做网站怎么样2015网站设计风格
远丰做网站怎么样,2015网站设计风格,网页游戏大全下载,中国还有哪些做外贸的网站2014-09-25 Created By BaoXinjian 一、摘要 集合是Oracle开发中经常遇到的情况#xff0c;Oracle集合分为三种情况#xff1a;索引表集合(index by table)、嵌套表集合(nested table)、可变集合(varry table)。 PL/SQL中没有数组的概念#xff0c;他的集合数据类型和数组是… 2014-09-25 Created By BaoXinjian 一、摘要 集合是Oracle开发中经常遇到的情况Oracle集合分为三种情况索引表集合(index by table)、嵌套表集合(nested table)、可变集合(varry table)。 PL/SQL中没有数组的概念他的集合数据类型和数组是相似的。 其中varray table的元素是有数量限制的index_by table和nexted table是没有这个限制的。index-by table是稀疏的也就是说下标可以不连续varray table则是紧密的他的下标没有间隔。index_by table不能存储在数据库中但是nexted table和varray table可以被存储在数据库中。集合在使用时必须先使用type进行定义方可使用 二、集合的定义方式 1. 索引表集合 index by table TYPE test_type IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER; 遍历方式这种数组不需要事先指定上限下标可以不连续可以是0或负数。 数据库存放不可以存放在数据库中 2. 嵌套表集合 nested table TYPE test_type IS TABLE OF VARCHAR2(10); 遍历方式下标从1开始不能超过数组所有元素的总和当下标超出允许范围时 数据库存放可以存放在数据库中 3. 可变集合 varry table TYPE test_type IS ARRARY(5) OF VARCHAR2(10); 遍历方式由于类型定义时的元素个数限制所以TYPE3的变量在使用时最大的元素个数不能超过5个。 数据库存放可以存放在数据库中 三、数组的存放在数据库方式 案例 创建一个存在嵌套表集合类型栏位的表 Step1. 创建记录类型Record Type CREATE OR REPLACE TYPE bxj_record
ASOBJECT (bxj_record_id NUMBER,bxj_record_date DATE,bxj_record_description VARCHAR2 (10)); Step2. 创建嵌套表集合类型nested table type CREATE OR REPLACE TYPE bxj_nested_table AS TABLE OF bxj_record; Step3. 创建测试表用以存放集合 CREATE TABLE bxj_test_table
(invoice_id NUMBER,invoice_num VARCHAR2 (10),invoice_date DATE,invoice_nested bxj_nested_table
)
NESTED TABLE invoice_nested STORE AS bxj_record_table Step4. 查看所建立的Object Step5. 插入测试资料 DECLAREv_record1 bxj_record : bxj_record (1, SYSDATE, 2014/09/29);v_record2 bxj_record : bxj_record (2, SYSDATE, 2014/09/30);v_invoice_id NUMBER;v_invoice_num VARCHAR2 (10);v_invoice_date DATE;v_invoice_nested bxj_nested_table : bxj_nested_table ();
BEGINv_invoice_id : 1;v_invoice_num : INVOICE_01;v_invoice_date : SYSDATE;v_invoice_nested.EXTEND;v_invoice_nested (1) : v_record1;v_invoice_nested.EXTEND;v_invoice_nested (2) : v_record2;INSERT INTO bxj_test_tableVALUES (v_invoice_id,v_invoice_num,v_invoice_date,v_invoice_nested);COMMIT;
END; Step6. 查看表数据 四、数组优化方式 arraysize / bulk collect 客户端Arraysize的设置实际上可以理解为设置数组的大小来保存sql调用的返回值。设置适当的arraysize有几个好处 1.减少读data block的次数也就是consistent gets的次数。 假设一个block有n行如果每次取一行则对该block的逻辑读次数就是n尽管逻辑读是内存读速度很快但并发量很大时也会使数据库的压力很大。 如果每次取n行则该block只需读一次。因此合理设置arraysize能大大减轻数据库压力。 2.在PLSQL中减少plsql引擎和sql引擎的切换次数提高效率 3.通过数组存放结果减少客户端和数据库服务器的调用次数减少往返时间 五、PLSQL Bulk Collect设置数组访问的方法 案例测试Bulk Collect访问数组的限制对consistent gets和script run time的影响 测试一不使用bulk collect,一次fetch一条记录 Step2. 运行测试脚本 DECLARECURSOR c1ISSELECT object_nameFROM all_objectsWHERE ROWNUM 100000;v_id VARCHAR2 (30);
BEGINOPEN c1;LOOPFETCH c1 INTO v_id;EXIT WHEN c1%NOTFOUND;NULL;END LOOP;CLOSE c1;
END;
/ Step3. 查看运行后consisten gets变化 235622 -109441 126811 测试二设置bulk collect一次取100条 Step1. 运行测试脚本 DECLARETYPE VarcharTabISTABLE OF VARCHAR2 (30)INDEX BY BINARY_INTEGER;CURSOR c1ISSELECT object_nameFROM all_objectsWHERE ROWNUM 100000;v_id VarcharTab;
BEGINOPEN c1;LOOPFETCH c1 BULK COLLECT INTO v_id LIMIT 100;EXIT WHEN c1%NOTFOUND;NULL;END LOOP;CLOSE c1;
END;
/ Step2. 查看运行后consisten gets变化 284623 -235622 49001 测试三设置bulk collect一次取5000条 Step1. 运行测试脚本 DECLARETYPE VarcharTabISTABLE OF VARCHAR2 (30)INDEX BY BINARY_INTEGER;CURSOR c1ISSELECT object_nameFROM all_objectsWHERE ROWNUM 100000;v_id VarcharTab;
BEGINOPEN c1;LOOPFETCH c1 BULK COLLECT INTO v_id LIMIT 5000;EXIT WHEN c1%NOTFOUND;NULL;END LOOP;CLOSE c1;
END;
/ Step2. 查看运行后consisten gets变化 332559 -284623 47936 测试结果 测试一consisten gets变化 235622 -109441 126811测试二consisten gets变化 284623 -235622 49001测试三consisten gets变化 332559 -284623 47936consistent_gets是从回滚段中读到的前映或叫读取一致性影象, 看见的数据是查询开始的时间点的所以若存在block在查询开始后发生了变化的情况则必须产生 before image 然后读数据这就是一致读的含义 查询就是表示 consistent gets (query mode)因为查询要保证所获取的数据的时间点的一致性所以叫一致读 即使是从当前 buffer 获得的数据也叫 consistent gets 这仅仅表达一种模式一种期望并不表示真实的是从 当前buffer 获得 还是从回滚段获取数据产生的 bufore image 。 网络上的一个测试结果 六、SQLPLUS设置数组访问的方法 Sqlplus的arraysize参数表示数据库一次返回给客户端的行数缺省是15。 如果返回数据量大可以调大此参数:Set arraysize nnnn 该参数最大为5000。 测试一缺省arraysize select * from all_objects where rownum 100000; 查看执行时间 测试二SQL set arraysize 1000 select * from all_objects where rownum 100000; 查看执行时间 Thanks and Regards 参考http://www.jb51.net/article/35424.htm 转载于:https://www.cnblogs.com/eastsea/p/3981038.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88392.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!