三、复合(COMPOSITE)
标量类型是经过预定义的,利用这些类型可以衍生出一些复合类型。主要有记录、表。
记录,可以看作是一组标量的组合结构,它的声明方式如下:
TYPE record_type_name IS RECORD
( filed1 type1 [NOT NULL] [:=expr1]
.......
filedn typen [NOT NULL] [:=exprn] )
其中,record_type_name是记录类型的名字。(是不是看着象CREATE TABLE?......)引用时必须定义相关的变量,记录只是TYPE,不是VARIABLE。
表,不是物理存储数据的表,在这里是一种变量类型,也称为PL/SQL表,它类似于C语言中的数组,在处理方式上也相似。它的声明方式如下:
TYPE table_type_name IS TABLE OF scalar_type INDEX BY BINARY_INTENER;
其中,table_type_name是类型的名字,scalar_type是一种标量类型的类型声明。引用时也必须定义相关的变量。表和数组不同,表有两列,KEY和VALUE,KEY就是定义时声明的BINARY_INTENER,VALUE就是定义时声明的scalar_type。
除了记录和表之外,还有对象类型、集合(嵌套表和VARRAYS)等类型,这些将专门讲解。
四、引用(REFERENCE)
在PL/SQL8.0之前,只有一种类型--REF CURSOR,也就是游标。它的定义较为简单,
CURSOR cursor_name IS select .....from.....;
在PL/SQL8.0之后,引入了REF类型,它指向一个对象。这种类型将单独讲解。(等我弄明白再说,免得在高人面前......)
五、LOB型
LOB变量主要是用来存储大量数据的数据库字段,最大可以存储4G字节的内容(这么大,存VCD?,浪费!)。主要有:
CLOB:和ORACLE7中的LONG类型相似,存储单字节字符数据。(别用来存中文喔。。。)
NCLOB:用来存储定宽多字节字符数据。(例如:存《啸傲江湖》就挺好)
BLOB:和LONG RAW相似,用来存储无结构的二进制数据。
BFILE:它用来允许ORACLE对数据库外存储的大型二进制文本进行只读形式的访问。
六、其他
其实在完成对标量变量的理解之后,基本上可以应付C/S模式下的常规数据库应用所需了,后续的类型说实话,我玩了5年ORACLE,都很少用到。
附:参考书《ORACLE8 PL/SQL程序设计》(《ORACLE8 PL/SQL PROGRAMMING》) ORACLE技术系列丛书 机械工业出版社
注:本文所列举的是PL/SQL当中可以定义的数据类型,并不是所有的类型都可以在建表时指定为列的数据类型