关于ORACLE复合类型的用法的总结
来源:互联网 发布:数据分析证书有哪些 编辑:程序博客网 时间:2024/06/04 19:04
关于ORACLE中的复合类型有:记录和集合(索引表,嵌套表,VARRAY)
一、集合
1 VARRAY
(1)自定义数据类型: (2)来自表的某个字段: 例子: =================================================================================== select ename bulk collect into v_var from emp where comm>0;
CREATE TYPE 类型名 IS VARRAY(52) OF VARCHAR2(20);
CREATE TYPE 类型名 IS VARRAY(52) OF 表名.字段%TYPE;
注意:使用VARRAY时一定要先指定数组大小
declare
type var_type is varray(10) of varchar2(30);
v_var var_type :=var_type();
begin
for i in 1..v_var.count loop
dbms_output.put_line('ename='||v_var(i));
end loop;
end;
2 嵌套表:
TYPE 类型名 IS TABLE OF 具体类型如:(表名%ROWTYPE);
3.索引表:
跟嵌套表相似,不同的是有末尾加上了INDEX BY BINARY_INTEGER。
例子:
===================================================================================
--嵌套表的用法
Create Or Replace Procedure lunartest2 Is
TYPE NumTab IS TABLE OF emp.empno%TYPE;
TYPE NameTab IS TABLE OF emp.ename%TYPE;
enums NumTab; -- no need to initialize
names NameTab;
BEGIN
SELECT empno, ename BULK COLLECT INTO enums, names FROM emp;
FOR i in enums.FIRST .. enums.LAST LOOP
DBMS_OUTPUT.PUT_LINE(enums(i) || ' ' || names(i));
END LOOP;
END;
嵌套表的元素可以是集合,注意赋值的时候是varray_element.record_column := 的形式.
除了构造函数外,集合还有很多内建函数,按照面向对象编成的叫法称之为方法。
方法==========描述====================================================================使用限制
COUNT=========返回集合中元素的个数
DELETE========删除集合中所有元素
DELETE(x)=====删除元素下标为x的元素===================================================对VARRAY非法
DELETE(x,y)===删除元素下标从X到Y的元素================================================对VARRAY非法
EXIST(x)======如果集合元素x已经初始化,则返回TRUE, 否则返回FALSE
EXTEND========在集合末尾添加一个元素==================================================对Index_by非法
EXTEND(x)=====在集合末尾添加x个元素===================================================对Index_by非法
EXTEND(x,n)===在集合末尾添加元素n的x个副本============================================对Index_by非法
FIRST=========返回集合中的第一个元素的下标号,对于VARRAY集合始终返回1。
LAST==========返回集合中最后一个元素的下标号, 对于VARRAY返回值始终等于COUNT.
LIMIT=========返回VARRY集合的最大的元素个数===========================================Index_by集合和嵌套表无用
NEXT(x)=======返回在第x个元素之后及紧挨着它的元素的值,如果x是最后一个元素,返回null.
PRIOR(x)======返回在第x个元素之前紧挨着它的元素的值,如果x是第一个元素,则返回null。
TRIM==========从集合末端开始删除一个元素==============================================对于index_by不合法
TRIM(x)=======从集合末端开始删除x个元素===============================================对index_by不合法
********************************************************************************************
二、记录
1.显式记录定义:
TYPE 类型名 IS RECORDER (具休类型)
2.隐式记录定义用%ROWTYPE.
变量名 表名%ROWTYPE(隐式定义)
例子:
隐式定义记录中,我们不用描述记录的每一个域,在声明记录变量时使用%ROWTYPE命令定义与数据库表,视图,游标有相同结构的记录。
有一些PL/SQL指令在使用隐式定义记录时没有使用%ROWTYPE属性,比如游标FOR循环或触发器中的:old和:new记录
--用记录:只能提取单条的记录,要提取多条记录时要用游标
===============================================
declare
--显式的记录
TYPE t_record IS RECORD (
id number(18,0),
name varchar2(50)
);
var_record t_record;
--隐式的记录
var_rec emp%rowtype;
begin
select empno,ename into var_record from emp where empno='7369';
dbms_output.put_line(var_record.id||'---'||var_record.name);
select * into var_rec from emp where empno='7369';
dbms_output.put_line(var_rec.empno||'---'||var_rec.ename);
exception when others then
dbms_output.put_line(sqlcode||sqlerrm);
end;
======================================================================================
三、综合实例BULK COLLECT的用法
注:bulk collect into 是用来保存多纪录到变量中。
set serverout on
DECLARE
TYPE t_record IS RECORD (
id number(18,0),
name varchar2(50)
);
var_record t_record; --定义记录
type t_test is table of t_record; --定义记录型的嵌套表(相当于构建成游标)
var_test t_test := t_test(); --定义变量时初始化为空
cursor cur_test is select empno,ename from emp;
begin
--用游标的方式
open cur_test;
fetch cur_test BULK COLLECT INTO var_test;
for i in 1..var_test.count() loop
dbms_output.put_line(var_test(i).id||'---'||var_test(i).name);
end loop;
end;
- 关于ORACLE复合类型的用法的总结
- oracle中复合变量的用法
- 关于两种复合类型--引用和指针以及const常量限定符的一些总结
- 复合类型的声明
- Oracle复合类型参数的存储过程以及JDBC调用
- Oracle复合类型参数的存储过程以及JDBC调用
- 关于C++的一些细节[三:复合类型]
- 关于基本类型的简单赋值和复合赋值运算
- 理解复合类型的声明
- 复合类型的字节对齐
- Oracle 复合类型
- Oracle复合类型
- oracle复合分区类型
- oracle 复合类型详解
- 复合类型学习总结
- 关于Oracle的LONG类型
- Oracle的索引类型总结
- Oracle的索引类型总结
- 29a牛文
- BigDecmal 舍位模式
- MySQL schema命名规则
- C# is与 java instanceof 作用相同
- javascript 窗口全屏
- 关于ORACLE复合类型的用法的总结
- 咖啡因中毒:如何计算 Espresso 杯容积?
- 命令行开启XP远程桌面
- OGRE雾化效果入门
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- android头文件路径
- JSON学习(一)——JSON简介和格式说明
- PCRE函数简介和使用示例
- 教你如何用U盘制作引导盘