在Oracle数据库当中,Type有如下几种用法:
1、定义类型;
2、声明当前的变量或元素的类型是已有表元素的类型。
1、自定义类型。
例子1:定义记录类型
create or replace TYPE ret_record is RECORD(
P1 VARCHAR2(20),
P2 VARCHAR2(10)
);
通过创建一个RECODE类型
declare myret ret_record '定义一个记录变量
例子2:定义一普通类型
create or replace type typ_calendar as object(
星期日 varchar2(8),
星期一 varchar2(8),
星期二 varchar2(8),
星期三 varchar2(8),
星期四 varchar2(8),
星期五 varchar2(8),
星期六 varchar2(8),
本月最后一日 varchar2(2)
);
这种类型可以在表结构定义的时候使用:
create table tcalendar of typ_calendar;
插入数据测试:
insert into tcalendar select typ_calendar('1','2','3','4','5','6','7','31') from dual;
注意:插入的数据需要用typ_calendar进行转换。
2、声明当前的变量或元素的类型是已有表元素的类型。
例如:
declare
v_empno emp.empno%type;
通过使用%TYPE,v_empno变量将同emp表的empno列的类型相同(可以理解为将两者邦定起来)。
这样做的好处是当emp表中empno字段类型发生更改时,变量v_empno就不需要进行更改,方便代码的维护。
(2.1) 使用%ROWTYPE
PL/SQL中提供的%ROWTYPE运算符,可以实现的操作是:将一个记录变量声明跟另一个记录或表等具有相同的数据类型。
如:
DECLARE
v_MyRecord TimeRecord%ROWTYPE;
记录可以定义为:
TYPE 类型名 IS RECORDER (具休类型)
也可用:变量名 表名%ROWTYPE
例子:
隐式定义记录中,我们不用描述记录的每一个域,在声明记录变量时使用%ROWTYPE命令定义与数据库表,视图,游标有相同结构的记录。
有一些PL/SQL指令在使用隐式定义记录时没有使用%ROWTYPE属性,比如游标FOR循环或触发器中的:old和:new记录
1 自定义一个TYPE使用VARRAY来得到一个数组但只能对基本类型定义如:
CREATE TYPE 类型名 AS VARRAY OF VARCHAR2(20);
1 自定义一个TYPE使用VARRAY来得到一个数组但只能对基本类型定义如:
CREATE TYPE 类型名 AS VARRAY(52) OF VARCHAR2(20);
不能使用如下:
CREATE TYPE 类型名 AS VARRAY(52) OF 表名%ROWTYPE;
注意:使用VARRAY时一定要先指定数组大小
不然搞创建数组类型
2 内嵌表如:
TYPE 类型名 IS TABLE OF 具体类型如:(表名%ROWTYPE);
内嵌表数组分二种:Index_by表同嵌套表如上的就是嵌套表而Index_by表只要在其尾回上 INDEX BY BINARY_INTEGER就可以了
例子:
declare
cursor cur_test is select id,mc from test;
type t_test1 is table of varchar2(60) index by binary_integer;
type t_test2 is table of test%rowtype index by binary_integer;
var_test1 t_test1;
var_test2 t_test2;
另外,这里用到一个VARRAY
这个是oracle当中的一个集合,
- CREATE OR REPLACE TYPE ED_DYNAMIC_PROC_LIST AS VARRAY(1000) OF ED_DYNAMIC_PROC_OBJ;
CREATE OR REPLACE TYPE ED_DYNAMIC_PROC_LIST AS VARRAY(1000) OF ED_DYNAMIC_PROC_OBJ;
这句话等于是声明了一个集合名字为ED_DYNAMIC_PROC_LIST,其大小为1000,这个集合当中用于存放ED_DYNAMIC_PROC_OBJ