首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

目录表

2012-10-17 
索引表1、索引表??索引表的机制实现不同于数组,pl/sql的索引表实现类似于数据库中的表,它有两列:key与value

索引表

1、索引表
??索引表的机制实现不同于数组,pl/sql的索引表实现类似于数据库中的表,它有两列:key与value. key的类型是binary_integer,而value的类型是is table of data_type中的data_type指定的数据类型.


2、索引表的一些特性:
?索引表是将数据保存在内存中!
?索引表是不受约束的,最大值是binary_integer的取值范围
?pl/sql索引表的元素没有必要按照特定的次序排序,元素可以按照任意键进行插入
?pl/sql索引表使用键(key)没有必要是顺序的,所有binary_integer数据或表达式都可以作用表的索引

?索引表的下标可以为负


3、索引表语法
?-- 定义记录集
??TYPE yang_rec IS RECORD( ename varchar2(30), eid NUMBER );
?-- 定义索引表类型
??TYPE yang_tab IS TABLE OF yang_rec INDEX BY BINARY_INTEGER;
?-- 定义索引表对象的实例
??test_tab yang_tab;

索引表的数据类型也可以是简单数据类型(varchar2 ,number等)


4、将条目插入到索引表中
?索引表中的每个元素都由一个唯一的整型值(索引)标识。引用表中的值时,必须提供该值的索引。
?索引的范围:1 ---- 2147483647,索引值可以不连续,同时PL/SQL并不为没有使用的条目预留空间。
?例如:


DECLARE CURSOR all_emps IS SELECT * FROM employee  ORDER BY emp_id; TYPE emp_table IS TABLE OF employee%ROWTYPE INDEX BY BINARY_INTEGER; emps     emp_table; emps_max BINARY_INTEGER; BEGIN emps_max := 0; FOR emp IN all_emps LOOP emps_max := emps_max + 1; emps(emps_max).emp_id := emp.emp_id; emps(emps_max).emp_name := emp.emp_name; END LOOP; END;

?对索引表中进行操作
?1) 插入:见上例。
?2) 引用:
??IF emps.EXIST(10) THEN
??DBMS_OUTPUT.PUT_LINE('存在第10条记录。');
??END IF;
?3) 修改:
?修改emps 表中的第100个条目:
??emps(100).emp_name := 'yang linker';
?4) 删除:
?-- 删除emps 表中的第100个条目:
??emps.DELETE(100);
?-- 删除emps 表中的从1到100的条目:
??emps.DELETE(1, 100);
?-- 删除emps 表中的的所有条目:
??emps.DELETE;


5、索引表中的函数
?1) count:返回表的条目数量:
??num_rows := emps.COUNT;
?2) EXISTS:如果指定的条目存在,则返回为真;否则为假。
??IF emps.EXIST(10) THEN
??DBMS_OUTPUT.PUT_LINE('存在第10条记录。');
??END IF;
?3) LIMIT:该方法返回集合可以包含的最大元素数目。只有变长数组才有上限。将LIMIT 用于嵌套表和索引
?表时,其返回为NULL。
?4) FRIST:该方法返回集合中使用的最小的索引值。
?5) LAST:该方法返回集合中使用的最大的索引值。
?6) NEXT:该方法返回集合中当前使用的下一个索引值。
?7) PRIOR:该方法返回集合中当前使用的上一个索引值。
?8) DELETE:删除集合中的条目,见前例。
?9) TRIM:从集合的尾部删除一个或多个条目,无返回值,只适用于变长数组和嵌套表。
??emps.TRIM(1); -- 从集合的尾部删除一个条目
??emps.TRIM(3); -- 从集合的尾部删除三个条目
?10) EXTEND:在集合的尾部添加条目或复制已有的条目,只适用于变长数组和嵌套表。
??emps.EXTEND(1); -- 从集合的尾部添加一个条目
??emps.EXTEND(3); -- 从集合的尾部添加三个条目
??emps.EXTEND(1, 3);-- 复制集合的第三个条目,并将其添加到表的末尾。

?

热点排行