复杂的数据类型

1.行记录类型

%rowtype

代表一行的记录结构

%前是表的名称

便于存储表中的一行

对于这种变量的调用,就像我们正常去获取表中一行里的值一样

 

declare

v1 dept%rowtype;

begin

select * into v1 from dept where deptno=10;

dbms_output.put_line(v1.deptno);

dbms_output.put_line(v1.dname);

dbms_output.put_line(v1.loc);

dbms_output.put_line(v1.deptno||' '||v1.dname||' '||v1.loc);

end;

/

 

2.PLSQL表  集合 数组

确切的讲,PLSQL表更像一个有主键约束(索引)的表,通过主键来访问数据

包含两个要素:

主键(元素的编号),数据类型为binary_integer

成员或者叫元素,可以为简单的变量,也可以是复杂的变量

 

简单变量的例子

declare

type t1 is table of emp.ename%type index by binary_integer;

type t2 is table of date index by binary_integer;

v1 t1;

v2 t2;

begin

v1(1):='SCOTT';

v2(1):=sysdate;

select ename,hiredate into v1(2),v2(2) from emp where empno=7900;

dbms_output.put_line(v1(1)||'                '||v1(2));

dbms_output.put_line(v2(1)||'                '||v2(2));

end;

/

 

复杂变量的例子

declare

type t1 is table of dept%rowtype index by binary_integer;

v1 t1;

begin

select * into v1(10) from dept where deptno=10;

select * into v1(20) from dept where deptno=20;

select * into v1(30) from dept where deptno=30;

select * into v1(40) from dept where deptno=40;

dbms_output.put_line(v1(10).deptno||' '||v1(10).dname||' '||v1(10).loc);

dbms_output.put_line(v1(20).deptno||' '||v1(20).dname||' '||v1(20).loc);

dbms_output.put_line(v1(30).deptno||' '||v1(30).dname||' '||v1(30).loc);

dbms_output.put_line(v1(40).deptno||' '||v1(40).dname||' '||v1(40).loc);

end;

/

 

PLSQL TABLE的属性

PRIOR:指定成员之前那个成员的编号

NEXT:指定成员之后那个成员的编号

COUNT:统计PLSQL TABLE中有多少个成员

FIRST:第一个成员编号是多少

LAST:最后一个编号是多少

DELETE:从PLSQL TABLE里删除成员,不写成员编号的话,就是删除全部成员

EXISTS:判断成员编号是否PLSQL TABLE中

 

 

declare

type t1 is table of dept%rowtype index by binary_integer;

v1 t1;

n1 number(3);

n2 number(3);

n3 number(3);

n4 number(3);

n5 number(3);

n6 number(3);

n7 number(3);

begin

select * into v1(10) from dept where deptno=10;

select * into v1(20) from dept where deptno=20;

select * into v1(30) from dept where deptno=30;

select * into v1(40) from dept where deptno=40;

n1:=v1.first;

n2:=v1.last;

n3:=v1.count;

n4:=v1.prior(20);

n5:=v1.next(20);

dbms_output.put_line(n1||' '||n2||' '||n3||' '||n4||' '||n5);

v1.delete(40);

n6:=v1.count;

dbms_output.put_line(n6);

end;

/

 

declare

type t1 is table of emp.ename%type index by binary_integer;

type t2 is table of date index by binary_integer;

v1 t1;

v2 t2;

begin

v1(1):='SCOTT';

v2(1):=sysdate;

select ename,hiredate into v1(7),v2(7) from emp where empno=7900;

select ename,hiredate into v1(12),v2(12) from emp where empno=7788;

for i in 1..10 loop

if v1.exists(i) then

dbms_output.put_line(v1(i));

end if;

if v2.exists(i) then

dbms_output.put_line(v2(i));

end if;

end loop;

end;

/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值