Oracle_Type和Varray

在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当中的一个集合,

Java代码 复制代码
  1. 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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值