PL/SQL(三):复合数据类型

一、复合数据类型
 存放多个字段,创建后可以多次使用
二、分类
 记录 表 嵌套表 数组

三、简介
1、记录
 存储一组多个字段的相关数据项,是字段的集合,主要用于从表中取出查询到的的行数据

      特殊的记录:%rowtype
      声明的表量对应数据库表或视图中列的集合,获取的是单条信息
  优点:
      对应数据库中列的数量和类型,并保持一致
2、表类型
  1) 类似于数组类型,由主键和列组成
  2) 主键:binary_integer ,列:标量或记录类型
  3) 没有长度限制,可以动态增长
  4) 表方法:
      exists(n):判断PL/SQL表中指定的元素是否存在,不能直接输出
      count : 返回一个PL/SQL表当前包含的元素的数量
      first/last:返回第一个或最后一个索引数字
      delete(n) :删除第 n 个元素
      delete(n,m) :删除从n到m中的所有元素

四.示例

1.record

declare
    type test_table is table of varchar(20) index by binary_integer;
    tt test_table;
begin
    tt(1):='a';
    tt(2):='b';
    tt(-1):='c';
    
    dbms_output.put_line(tt.count);   -- 3
    dbms_output.put_line(tt.first);  --  -1
    dbms_output.put_line(tt.last);   --  2
    
    if(tt.exists(0)) then
        dbms_output.put_line('存在0下标');
    else
         dbms_output.put_line('不存在0下标');    
    end if;  
   
    tt.delete(1);    --删除下标为1 的值
    tt.delete(1,3);  --删除下标在1到3所有的值  
    tt.delete();     --删除全部值
end;                  


2.  %rowtype

--%rowtype
declare
   emp_record emp%rowtype;
begin
   select * into emp_record
   from emp where empno = 7499;   --选择编号为7499的员工信息
 
   insert into test(empno,ename)  
   values(emp_record.empno,emp_record.ename);  --只选取empno,ename两字段,插入text表中
end;


3.  %rowtype + record

-- %rowtype + record

declare
       
       type emp_dept_rec is record(     
         emp_row emp%rowtype,   --员工表
         dept_row dept%rowtype  -- 部门表
       );
       edr emp_dept_rec;
begin
    select * into edr.emp_row
    from emp 
    where sal = (select max(sal) from emp );  --选中工资最高的员工信息
    
    select * into edr.dept_row
    from dept 
    where deptno = edr.emp_row.deptno;        --通过部门号,找到部门的所在信息
    
    dbms_output.put_line(edr.emp_row.empno);            --员工表,empno字段
    dbms_output.put_line(edr.emp_row.ename);            --员工表,ename字段
    dbms_output.put_line(edr.emp_row.deptno);           --员工表,deptno字段
    dbms_output.put_line(edr.dept_row.deptno);          --部门表,deptno字段
    dbms_output.put_line(edr.dept_row.dname);           --部门表,dname字段
end;    


4. table 类型

--table 类型
declare
    type test_table is table of varchar(20) index by binary_integer;
    tt test_table;
begin
    tt(1):='a';
    tt(2):='b';
    tt(-1):='c';
    
    dbms_output.put_line(tt.count);   -- 3
    dbms_output.put_line(tt.first);  --  -1
    dbms_output.put_line(tt.last);   --  2
    
    if(tt.exists(0)) then
        dbms_output.put_line('存在0下标');
    else
         dbms_output.put_line('不存在0下标');    
    end if;  
   
    tt.delete(1);    --删除下标为1 的值
    tt.delete(1,3);  --删除下标在1到3所有的值  
    tt.delete();     --删除全部值
end;                              


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值