ITPub博客

首页 > Linux操作系统 > Linux操作系统 > plsql笔记二_常量变量(2复合变量)

plsql笔记二_常量变量(2复合变量)

原创 Linux操作系统 作者:linkorder 时间:2010-12-24 16:07:28 0 删除 编辑
数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。在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/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-05-16

  • 博文量
    4
  • 访问量
    4242