您的位置:首页 > 数据库

PL/SQL之记录表数据类型

2016-02-26 14:54 281 查看
记录表(或索引表)数据类型与记录类型相似,是对记录类型的扩展。因为记录类型只能处理单条数据,所以扩展表类型处理

多条记录,类似于二维数组,可以模仿数据库中的表。

记录表类型的定义语法:

--记录表类型的定义语法
TYPE table_name IS TABLE OF element_type [not null]
INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARRAY2];

--关键字 INDEX BY 表示创建一个主键索引,以便引用记录表变量中的特定行。
创建表,和插入数据:

create table mytest(
id number(3),
name varchar2(20),
age number(3)
);
insert into mytest values(1,'one',18);
insert into mytest values(2,'two',20);
insert into mytest values(3,'three',24);
commit;


实例使用:

DECLARE
--定义记录表类型
TYPE mytest_table_type IS TABLE OF mytest%ROWTYPE
INDEX BY BINARY_INTEGER;
--声明记录类型
v_table_type mytest_table_type;
--定义循环变量
v_count number(2) := 3;
BEGIN
--每次根据id查询的数据放在记录表中,同时int指定特定下标,像表的主键
FOR int IN 1..v_count LOOP
SELECT * INTO v_table_type(int) FROM mytest WHERE id = int;
END LOOP;
--从记录表中循环输出数据,每次根据id查询出整条数据,从每条数据中取输出的属性值
FOR int IN v_table_type.FIRST .. v_table_type.LAST LOOP
DBMS_OUTPUT.PUT_LINE('姓名:'||v_table_type(int).name);
DBMS_OUTPUT.PUT_LINE('年龄:'|| v_table_type(int).age);
DBMS_OUTPUT.PUT_LINE('-------------------------------');
END LOOP;
END;
输出结果:

姓名:one

年龄:18

-------------------------------

姓名:two

年龄:20

-------------------------------

姓名:three

年龄:24

-------------------------------

一维数组形式使用记录类型:

DECLARE
--定义记录表类型
TYPE my_table_type IS TABLE OF varchar2(50)
INDEX BY BINARY_INTEGER;
--声明变量
v_my_table my_table_type;
BEGIN
--给数组对象赋值
v_my_table(1) := 'one';
v_my_table(2) := 'two';
v_my_table(3) := 'three';
v_my_table(4) := 'four';
--根据数组下标输出数组值
DBMS_OUTPUT.PUT_LINE(v_my_table(1));
DBMS_OUTPUT.PUT_LINE(v_my_table(2));
DBMS_OUTPUT.PUT_LINE(v_my_table(3));
DBMS_OUTPUT.PUT_LINE(v_my_table(4));
END;
输出结果:

one

two

three

four

二维数组形式使用记录类型:

DECLARE
--定义记录表类型
TYPE my_table_type IS TABLE OF mytest%ROWTYPE
INDEX BY BINARY_INTEGER;
--声明变量
v_my_table my_table_type;
BEGIN
--给数组对象赋值
SELECT name,age INTO v_my_table(1).name,v_my_table(1).age FROM mytest WHERE id = 1;
SELECT name,age INTO v_my_table(2).name,v_my_table(2).age FROM mytest WHERE id = 2;
SELECT name,age INTO v_my_table(3).name,v_my_table(3).age FROM mytest WHERE id = 3;
--根据数组下标输出数组值
DBMS_OUTPUT.PUT_LINE(v_my_table(1).name||' '||v_my_table(1).age);
DBMS_OUTPUT.PUT_LINE(v_my_table(2).name||' '||v_my_table(2).age);
DBMS_OUTPUT.PUT_LINE(v_my_table(3).name||' '||v_my_table(3).age);
END;
输出结果:

one 18

two 20

three 24
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: