我想问一下,INDEX_BY表的存在是为了什么,仅仅是为了省空间,不是真正的表,不存储在

[复制链接]
查看11 | 回复3 | 2014-7-11 07:56:59 | 显示全部楼层 |阅读模式
我想问一下,INDEX_BY表的存在是为了什么,仅仅是为了省空间,不是真正的表,不存储在数据库中吗?
速度能更快吗?
Index_by表定义语法如下:
TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY BINARY_INTEGER;
关键字是INDEX BY BINARY_INTEGER,没有这个关键字,那么集合将是一个嵌套表。由于不存储在数据库中,
element_type可以是任何合法的PL/SQL数据类型,包括:PLS/INTEGER、SIGNTYPE、和BOOLEAN。

index_by表:
*/
declare
cursor cur_test is select id,mc from test;
type t_test1 is table of varchar2(60) index by binary_integer;
type t_test2 is table of test%rowtype index by binary_integer;
var_test1 t_test1;
var_test2 t_test2;
var_new t_test2;
begin
SELECT id,mc INTO var_test2(0) FROM test WHERE id='111';
dbms_output.put_line('var_test2(0):'||var_test2(0).id||'---'||var_test2(0).mc);
SELECT id,mc INTO var_test2(8) FROM test WHERE id='333';
dbms_output.put_line('var_test2(8):'||var_test2(8).id||'---'||var_test2(8).mc);
var_new := var_test2;
dbms_output.put_line('===== copy var_test2 to var_new =====');
dbms_output.put_line('var_new(0):'||var_new(0).id||'---'||var_new(0).mc);
dbms_output.put_line('var_new(8):'||var_new(8).id||'---'||var_new(8).mc);
end;
/
回复

使用道具 举报

千问 | 2014-7-11 07:56:59 | 显示全部楼层
是个变量,执行时存储在PGA中。执行完毕自动释放。不可做为数据库类型使用。
回复

使用道具 举报

千问 | 2014-7-11 07:56:59 | 显示全部楼层
谢谢,那关键是带来什么好处呢?省空间,加快执行速度?还是什么???
回复

使用道具 举报

千问 | 2014-7-11 07:56:59 | 显示全部楼层
最初由 wabjtam123 发布
[B]谢谢,那关键是带来什么好处呢?省空间,加快执行速度?还是什么??? [/B]

我的一点理解:
1)进行复杂程序设计时,除了用到简单类型以外,一般都会用到复合类型,eg. 数组。所有的过程化程序设计语言(如C++ DELPHI JAVA)都支持简单类型和复合类型。
2)SQL是一种的非过程化程序设计语言,不支持数组之类的复杂类型。为了进行扩展,ORACLE提出了PL/SQL,其中就支持table表类型。以前的版本支持Index_by表,现在能支持嵌套表、VARRAY等;这样,程序的表达能力增强了不少,方便了程序设计人员。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行