数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
int a[10]; 说明整型数组a,有10个元素。
float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。
char ch[20]; 说明字符数组ch,有20个元素。
复合变量
--复合变量是指用于存放多个值的变量.当定义符合变量时,必需要使用PL/SQL的复合数据类型.PL/SQL包括PL/SQL记录,PL/SQL表,嵌套表以及VARRAY(变长数组;动态数组 )等四种复合数据类型.
1.PL/SQL记录
--PL/SQL记录 类似于高级语言中的结构,每个PL/SQL记录一般都包含多个成员.当使用PL/SQL记录时,首先需要在定义部分定义记录类型和记录变量,然后在执行部分引用该记录变量.需注意,当引用记录成员时,必须要加记录变量作为前缀(记录变量.记录成员).
例:
SQL> set serveroutput on
SQL> declare
2 type emp_record_type is record( <==emp_record_type是PL/SQL记录类型
3 name emp.ename%type, <==\
4 salary emp.sal%type, |<==name,salary,title是该PL/SQL记录类型包含的三个成员
5 title emp.job%type); <==/
6 emp_record emp_record_type; <==emp_record是记录变量(emp_record是emp_record_type的变量而emp_record_type是一个记录类型)
7 begin
8 select ename,sal,job into emp_record
9 from emp where empno=7788;
10 dbms_output.put_line('雇员名:'||emp_record.name); <==emp_record.name表示引用记录变量emp_record的成员name.(emp_record_type.name)
11 end;
12 /
雇员名:SCOTT
PL/SQL 过程已成功完成。
定义一个PL/SQL记录类型,并定义这个类型包含了三个成员,并emp_record是emp_record_type的变量,然后执行部分,并引用记录变量emp_record的成员name(个人理解)
2.PL/SQL表
--PL/SQL表类似于高级语言中的数组.需要注意,PL/SQL表与高级语言的数组有所区别,高级语言数组的下标不能为负,但PL/SQL表的下标可以为负值;高级语言数组的元素个数有限制,而PL/SQL表的元素个数没有限制,并且其下标没有上下限.当使用PL/SQL表时,必需首先在定义部分定义PL/SQL表类型和PL/SQL表变量,然后在执行部分中引用该PL/SQL表变量.
例:
SQL> declare
2 type ename_table_type is table of emp.ename%type <==ename_table_type为PL/SQL表类型;emp.ename%type指定了PL/SQL表元素的数据类型和长度
3 index by binary_integer;
4 ename_table ename_table_type; <==ename_table为PL/SQL表变量,
5 begin
6 select ename into ename_table(-1) from emp <==ename_table(-1)表示下标为-1的元素
7 where empno=7788;
8 dbms_output.put_line('雇员名:'|| ename_table(-1));
9 end;
10 /
雇员名:SCOTT
PL/SQL 过程已成功完成。
3.嵌套表
--嵌套表(Nested Table)类似于高级语言中的数组.需要注意,高级语言数组和嵌套表的下标都不能为负值;高级语言的元素个数是有限制的,而嵌套表的元素个数是没有限制的.嵌套表和PL/SQL表非常类似,但嵌套表可以作为表列的数据类型,而PL/SQL表不能作为表列的数据类型.当在表列中使用嵌套表时,必需首先使用CREATE TYPE语句建立嵌套表类型.
例:
SQL> create or replace type emp_type as object( <==对象类型emp_type用于存储雇员信息,
2 name varchar2(10),salary number(6,2),
3 hiredate date);
4 /
类型已创建。
SQL> create or replace type emp_array is table of emp_type; <==emp_array是基于emp_type的嵌套表类型,用于存储多个雇员信息
2 /
类型已创建。
当建立了嵌套表类型之后,就可以在表列或对象属性中将其作为用户自定义数据类型来引用.但需要注意,当使用嵌套表类型作为表列时,必须要为其指定专门的存储表如下:
SQL> create table department(
2 deptno number(2),dname varchar2(10),
3 employee emp_array)
4 nested table employee store as employee <==employee=存储表
5 ;
表已创建。
SQL> desc employee
名称 是否为空? 类型
----------------- -------- ------------
NAME VARCHAR2(10)
SALARY NUMBER(6,2)
HIREDATE DATE
SQL> desc department
名称 是否为空? 类型
----------------- -------- ------------
DEPTNO NUMBER(2)
DNAME VARCHAR2(10)
EMPLOYEE EMP_ARRAY
4.VARRAY
--varray(编程数组)类似于嵌套表,可以作为表列和对象类型属性的数据类型.但需要注意,嵌套表的元素个数没有限制,而varray的元素个数是有限制的,当使用varray时,必须首先建立varray类型.
例:
SQL> create type article_type as object( <==article_type用于存储文章信息
2 titile varchar2(30),pubdate date);
3 /
类型已创建。
SQL> desc article_type
名称 是否为空? 类型
----------------- -------- ------------
TITILE VARCHAR2(30)
PUBDATE DATE
SQL> create type article_array is varray(20) of article_type; <==article_array则用于存储多篇文章的信息,并且最多可以存储20篇文章
2 /
类型已创建。
SQL> desc article_array
article_array VARRAY(20) OF ARTICLE_TYPE
名称 是否为空? 类型
----------------- -------- ------------
TITILE VARCHAR2(30)
PUBDATE DATE
当建立了VARRAY类型之后,可以在表列或对象属性中将其作为用户自定义数据类型来引用
SQL> create table author(id number(6),name varchar2(10),article article_array);
表已创建。
SQL> desc author
名称 是否为空? 类型
----------------- -------- ------------
ID NUMBER(6)
NAME VARCHAR2(10)
ARTICLE ARTICLE_ARRAY
SQL>
注意,嵌套表列数据需要存储在专门的存储表中,而varray数据则与其他列数据一起存放在表段中.
VARRAY: 变长数组;动态数组
record: 纪录;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22279684/viewspace-682569/
,如需转载,请注明出处,否则将追究法律责任。