12.定义并使用变量-复合类型

复合类型(composite)---类似于java中的数据

---介绍

用于存放多个值的变量。主要包括这几种:
1)pl/sql记录
2)pl/sql表
3)嵌套表
4)varray

1.复合类型---pl/sql记录
类似于高级语言中的结构体,需要注意的是,当引用pl/sql记录成员时,必

须要加记录变量作为前缀(记录变量.记录成员)如下;

SQL>   declare
  2    --定义一个pl/sql记录类型 emp_record_type
  3    type emp_record_type is record(
  4    name emp.ename%type,
  5    salary emp.sal%type,
  6    title emp.job%type);
  7    --定义一个 sun_record变量,这个变量的类型是emp_record_type
  8    sun_record emp_record_type;
  9    begin
 10      select ename,sal,job into sun_record from emp where

empno=&no;
 11      --输出
 12      dbms_output.put_line('员工名:'||sun_record.name||' 工资:'||sun_record.salary||' 岗位:'||sun_record.title);
 13      end;
 14  /
员工名:MARTIN 工资:1250 岗位:SALESMAN
PL/SQL procedure successfully completed

如实例:sun_record是记录变量,name就是sun_record的记录成员

复合类型---pl/sql表
相当于高级语言中的数组,但是需要注意的是再高级语言中数组的下标不能为负数,而pl/sql是可以为负数,并且表元素的下标没有限制。实例如下:

SQL>  --pl/sql表实例
SQL>     declare
  2      --定义一个pl/sql表类型 sun_table_type,该类型是用于存放emp.ename%type类型数据的数组
  3      --index by binary-integer表示下标是整数
  4      type sun_table_type is table of emp.ename%type index by binary_integer;
  5      --定义一个sun_table变量,这个变量的类型是sun_table_type
  6      sun_table sun_table_type;
  7      begin
  8        select ename into sun_table(0) from emp where empno=&no;
  9        dbms_output.put_line('员工名:'||sun_table(0));
 10        end;
 11  /
员工名:MARTIN
PL/SQL procedure successfully completed

说明:
sun_table_type 是pl/sql表的类型
emp.ename%type 指定了表的元素的类型和长度
sun_table 为pl/sql表变量
sun_table(0)则表示下标为0的元素


如果把where条件去掉会怎么样?
这样就是将emp表的所有的雇员的名字都放到sun_table(0)里,程序会报错


如何解决返回多行结果的问题?
使用参照变量即可解决

下面这两种变量不怎么使用
复合变量---嵌套表(nested table)
复合变量---变长变量(varray)


猜你喜欢

转载自1124117571.iteye.com/blog/2287444
今日推荐