Oracle表类型变量的使⽤
使⽤记录类型变量只能保存⼀⾏数据,这限制了SELECT语句的返回⾏数,如果SELECT语句返回多⾏就会错。Oracle提供了另外⼀种⾃定义类型,也就是表类型,它是对记录类型的扩展,允许处理多⾏数据,类似于表。
创建表类型的语法如下:
TYPE table_name IS TABLE OF data_type [ NOT NULL ]
INDEX BY BINARY_INTEGER ;
语法说明如下:
--table_name 创建的表类型名称。
--IS TABLE 表⽰创建的是表类型。
--data_type 可以是任何合法的PL/SQL数据类型,例如varchar2。
--INDEX BY BINARY_INTEGER 指定系统创建⼀个主键索引,⽤于引⽤表类型变量中的特定⾏。
使⽤表类型的例⼦:
例⼀:直接对表类型变量赋值
declare
type my_emp is table p%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
','||new_emp(2).sal);
end;
/
例⼆:使⽤表类型变量的⽅法:变量名.⽅法名[索引号]
declare
type my_emp is table p%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp.first||','||unt||','||new_emp.last);
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
oracle游标的使用','||new_emp(2).sal);
--new_emp.delete(1);
dbms_output.put_line((1));
end;
//
例三:与游标结合使⽤
declare
type my_emp is table p%rowtype
index by binary_integer;
new_emp my_emp;
v_num number:=0;
cursor cur_emp is select empno,ename,job,sal p;
begin
for v_emp in cur_emp loop
v_num:=v_num+1;
select * into new_emp(v_num) p
where ename=ame;
end loop;
for i unt loop
dbms_output.put_line(new_emp(i).empno ||','||new_emp(i).ename||','||new_emp(i).job||
','||new_emp(i).sal);
end loop;
end;
/
注意:不能直接对表变量赋值:select * into new_emp p where deptno=30; 这种赋值⽅法是错的,赋值需要使⽤下标,如上⾯的的例⼦。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论