`
burninglouis
  • 浏览: 35466 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

索引表

阅读更多

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);-- 复制集合的第三个条目,并将其添加到表的末尾。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics