PL/SQL之记录表数据类型
2016-02-26 14:54
330 查看
记录表(或索引表)数据类型与记录类型相似,是对记录类型的扩展。因为记录类型只能处理单条数据,所以扩展表类型处理
多条记录,类似于二维数组,可以模仿数据库中的表。
记录表类型的定义语法:
实例使用:
姓名:one
年龄:18
-------------------------------
姓名:two
年龄:20
-------------------------------
姓名:three
年龄:24
-------------------------------
一维数组形式使用记录类型:
one
two
three
four
二维数组形式使用记录类型:
one 18
two 20
three 24
多条记录,类似于二维数组,可以模仿数据库中的表。
记录表类型的定义语法:
--记录表类型的定义语法 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
相关文章推荐
- 创建mysql分区表操作
- 利用redis + lua解决抢红包高并发的问题
- Oracle Parameter: cpu_count¶llel_max_servers
- mysql 创建新用户 并赋予权限
- 免安装版的mysql首次登录不进去怎么办
- 数据库优化
- 同步相同结构数据库数据
- 设置或修改Redis访问密码
- spring整合mongodb
- 创建作业的SQL
- 设置mysql 的root密码
- CentOS安装Redis记录
- MySQL中SELECT+UPDATE处理并发更新问题解决方案分享
- mysql中not in,in,exists,not exists原理和区别
- Labview数据库基本操作及相关一些步骤和疑问解决方法
- Redis学习-List类型
- PHP安装MongoDB扩展
- 将MSSQL表数据转成SQL语句
- mysql5.7在windows8.1下安装的各种问题
- SQL Server 2008 R2 事务与隔离级别实例