Oracle提供两种使用嵌套表(二)

2014-11-24 17:59:49 · 作者: · 浏览: 9
ABLE EMPS
  STORE AS EMPS_NEST
  RETURN BY VALUE;
  
  RETURN BY VALUE用来描述嵌套表如何返回到客户应用程序中。
  NESTED_TABLE_ID列必须是索引的,那么较好的解决办法就是使用IOT存储嵌套表。
  CREATE TABLE DEPT_AND_EMP
  (DEPTNO NUMBER(2,0),
   DNAME VARCHAR2(14),
   LOC VARCHAR2(13),
   EMPS EMP_TAB_TYPE)
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  LOGGING STORAGE(INITIAL 131072 NEXT 131072
  MINEXTENTS 1 MAXEXTENTS 4096
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUP 1
  BUFFER_POOL DEFAULT) TABLESPACE USER
  NESTED TABLE EMPS
  STORE AS EMPS_NEST
  ((empno NOT NULL,
UNIQUE(empno),
PRIMARY KEY(nested_table_id,empno))
  ORGANIZATION
  INDEX COMPRESS 1)
  RETURN BY VALUE;
  
  这样与最初默认的嵌套表相比,使用了较少的存储空间并有最需要的索引。
  不使用嵌套表作为永久存储机制的原因
  1.增加了RAW(16)列的额外开销,父表和子表都将增加这个额外的列;
  2.当通常已经有唯一约束时,父表上的唯一约束是额外开销;
  3.没有使用不支持的结构(NESTED_TABLE_GET_REFS),嵌套表不容易使用。
  一般推荐在编程结构和视图中使用嵌套表。如果要使用嵌套表作为存储机制,确保嵌套表是IOT,以避免NESTED_TABLE_ID和嵌套表本身中索引的额外开销。