集合精解

发布时间:2023-12-18 02:14:53   来源:文档文库   
字号:
Oracle中的集合(精解集合精解Oracle中一共有三种集合类型:indexby嵌套表可变数组其中indexby表只能用于PL/SQL中,而不能用于数据库表定义。嵌套表可以存储在数据库表中。indexby表和嵌套表统称为PL/SQL表。可变数组被声明为具有固定数目的元素的集合,而PL/SQL表没有声明上限。一、indexbyindexby表在句法上类似于CJAVA中的数组。首先需要定义表的属性,然后在声明使用。句法:TYPEtabletypeISTABLEOFtypeINDEXBYBINARY_INTEGER;其中tabletype是所定义的新类型的类型名,type是一个预定义的类型,或通过%TYPE%ROWTYPE对一个类型的引用。INDEXBYBINARY_INTEGER子句是该表定义的一部分。这个子句对于嵌套表是不存在的。一旦声明了类型和变量,就可以引用其中的单个元素:tablename(index其中tablename是表的名称,index是一个BINARY_INTEGER类型的变量,或者是一个可以转换成BINARY_INTEGER类型的变量或表达式。注意:aindex-by表是无大小约束的。其行数的唯一限制(除可用内存外就是它的关键字是BINARY_INTEGER类型的,因此要受到BINARY_INTEGER类型所能表示数值的约束(-2147483647~2147483647bindex-by表中的元素不一定要按任何特定顺序排列。因为它们不像数组那样在内存中是连续存储的,所以其元素可以借助于任意关键字插入(如果你从PL/SQL中把一个index-by表传递到CJAVA的主机数组,其元素应该从1始依次编号c用于index-by表的关键字没有必要是有序的。任何BINARY_INTEGER值或表达式都可以用作表的索引。d、关键字的类型是BINARY_INTEGERPLS_INTEGER\VARCHAR2eindex-by表类似于数据库表,它有keyvalue两列key的类型是BINARY_INTEGERPLA_INTEGERVARCHAR2,而value的类型是在定义中指定的任何数据类型,可以是简单数值,也可以是记录,或者是对象,也可以是集合。如果value的值是一条记录,那么可以使用table(indexfield来引用该记录的字段。f对于index-by表中的元素i赋值时,如果该元素i不存在,实际上会创建一个元素i,这类似于对数据库表进行的INSERT操作。如果对元素i引用而其不存在,那么会抛出一个异常。可以使用DELETE方法来删除表元素。例如:DECLARETYPENameTabISTABLEOFstudents.first_name%TYPE
INDEXBYBINARY_INTEGER;TYPEDateTabISTABLEOFDATEINDEXBYBINARY_INTEGER;v_NamesNameTab;v_DatesDateTab;BEGINv_Names(1:='Scott';v_Dates(-4:=SYSDATE-1;END;非标量类型的index-byDECLARETYPEStudentTabISTABLEOFstudents%ROWTYPEINDEXBYBINARY_INTEGER;v_StudentsStudentTab;BEGINSELECT*INTOv_Students(10001FROMstudentsWHEREid=10001;v_Students(1.first_name:='Larry';v_Students(1.last_name:='Lemon';END;对象类型的index-byCREATEORREPLACETYPEMyObjectASOBJECT(field1NUMBER,field2VARCHAR2(20,field3DATE;DECLARETYPEObjectTabISTABLEOFMyObjectINDEXBYBINARY_INTEGER;v_ObjectsObjectTab;BEGINv_Objects(1:=MyObject(1,null,null;---用构造函数一次赋值v_Objects(1.field2:='HelloWorld!';--对单个元素中的域进行赋值v_Objects(1.field3:=SYSDATE;END;二、嵌套表嵌套表的基本功能与index-by表相同,嵌套表可以被看做是具有两个列的数据库表。我们可以从嵌套表中删除元素,这样得到一个具有非有序关键字的稀疏表,这个表就像index-by表。然而,嵌套表必须用有序的关键字创建,而且关键字不能是负数。此外,嵌套表可以存储到数据库中,而index-by表则不能。嵌套表中的最大行数是2G字节,这也是最大的关键字值。创建一个嵌套表类型的句法:TYPEtable_nameISTABLEOFtable_type[NOTNULL];其中table_name是新类型的类型名字,table_type是嵌套表中每一个元素的类型,它可以是用户定义的对象类型,也可以是使用%TYPE的表达式,但是它不可以是BOOLEANNCHARNCLOBNVARCHAR2REFCURSOR类型。

本文来源:https://www.2haoxitong.net/k/doc/5f80cd5a33d4b14e85246895.html

《集合精解.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式