复合类型数据

(1)记录类型
--自定义record类型
DECLARE
  TYPE example_record_type IS RECORD(
    name emp.ename%TYPE,
    salary emp.salary%TYPE,
    dno emp.deptno%TYPE        
  );      
  --声明record类型变量
  example_record example_record_type; 
BEGIN
  --PL/SQL语句
END;  

--使用%ROWTYPE属性定义记录变量
  %ROWTYPE属性可以基于表或视图定义记录变量。使用该属性定义记录变量时,记录成员的名称和类型与表或视图
  列的名称和类型完全相同。
  --identifier table_name%ROWTYPE;
  --identifier view_name%ROWTYPE;   

(2)PL/SQL表
  索引表的小表可以为负值,而且其元素个数没有限制。
  
  --语法如下:
  TYPE type_name IS TABLE OF elment_type [NOT NULL] INDEX BY key_type;
  key_type用于指定索引表元素下标的数据类型(BINARY_INTEGER,PLS_INTEGER,,VARCHAR2);
  identifier type_name;     
  
  --例:
  set serveroutput on
  DECLARE
    TYPE ename_table_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER;
    ename_table ename_table_type;
  BEGIN
    SELECT ename INTO ename_table(-1) FROM emp
      WHERE empno = &no;
    dbms_output.put_line(ename_table(-1)); 
  END;
  /  

(3)嵌套表
  嵌套表也是一种用于处理PL/SQL数组的数据类型。嵌套表的元素下标从1开始,并且元素个数没有限制。高级语言的数组元素   值是顺序的,而嵌套表元素的数组元素值可以是稀疏的。

  --语法
  TYPE type_name IS TABLE OF element_type;
  identifier type_name;

  --例:

  --在PL/SQL块中使用嵌套表
  DECLARE
    TYPE ename_table_type IS TABLE OF emp.ename%TYPE;
    ename_table ename_table_type;
  BEGIN
    ename_table := ename_table_type("MARY", "MARY", "MARY");
    SELECT ename INTO ename_table(2) FROM emp 
      WHERE empno = &no;
    dbms_output.put_line(ename_table(2));
  END;
  /

  --在表列中使用嵌套表
  CREATE TYPE phone_type IS TABLE OF VARCHAR2(20);
  /
  CREATE TABLE employee(
  id NUMBER(4),
  name VARCHAR2(10),
  sal NUMBER(6,2),
  phone phone_type
  )NESTER TABLE phone STORE AS phone_table;

(4)变长数组(VARRAY)
  其元素下标从1开始,并且元素的最大个数有限制。
  
  --语法
  TYPE type_name IS VARRAY(size_limit) OF element_type [NOT NULL];
  identifier type_name;
    
  --例:

  --在PL/SQL块中使用变长数组
  DECLARE
    TYPE ename_table_type IS VARRAY(20) OF emp.ename%TYPE;
    ename_table ename_table_type:=ename_table_type("MARY", "MARY", "MARY");;
  BEGIN
    SELECT ename INTO ename_table(1) FROM emp 
      WHERE empno = &no;
    dbms_output.put_line(ename_table(1));
  END;
  /

  --在表列中使用变长数组
  CREATE TYPE phone_type IS VARRAY(20) OF VARCHAR2(20);
  /
  CREATE TABLE employee(
  id NUMBER(4),
  name VARCHAR2(10),
  sal NUMBER(6,2),
  phone phone_type
  );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值