oracle的type类型

1.创建简单的对象类型
create or replace type userInfoOther as object (
        id number,--用户id
        cardid number,--身份证号码
        gjjid number,--公积金号码
        sbid number--社保号码
);
   
 --实例化一个简单  userInfoOther对象 构造方法就是传入4个属性 也可以全部是 userInfoOther(null,null,null,null);
 declare userTmp userInfoOther:=userInfoOther(1,1,1,1);--这里必须构造方法初始化
 begin
    dbms_output.put_line(userTmp.cardid);
 end;


2 创建简单的数组类型

--创建一个可变长度的数组
create or replace type varArray as varray(20) of varchar2(20);
--操作数组
declare varTmp varArray:=varArray();
begin
        varTmp.extend();
        varTmp(1):='ggg';
        varTmp.extend();
        varTmp(2):='bbb';
        for gg in 1..varTmp.count() loop
            dbms_output.put_line(varTmp(gg));
          end loop;
  end;

3 创建对象的数组类型

--相当于java中的List<userInfoOther>
create or replace type userInfoArray as table of userInfoOther;


declare uia userInfoArray:=userInfoArray();
begin
  uia.extend();
  uia(1):=userInfoOther(1,123,333,444);
  dbms_output.put_line(uia(1).cardid);
end;


4 在plsql中定义临时type

使用对象

declare type medinfo is record(  --这里就不能使用 is object了
    id number,
    name varchar2(20)
);
medTmp medinfo;                  --:=medinfo(1,'ggg') 临时的不能通过new的方式
begin
  medTmp.name:='jiaozi';
  dbms_output.put_line(medTmp.name);
end;

使用数组

 declare 
 type workinfo is table of varchar2(20) index by binary_integer;
 workTmp workinfo;--不能也不需要 :=workinfo()
 begin
   workTmp(1):='ggg';--不需要手工调用extend加空间 这里自动的
   dbms_output.put_line(workTmp(1));
 end;

使用对象数组

declare 
 type medinfo is record( 
    id number,
    name varchar2(20)
 );
 type medList is table of medinfo index by binary_integer;
 medTmp medList;--不能也不需要 :=workinfo()
 begin
   --不需要手工调用extend加空间 这里自动的
   medTmp(1).name:='jiaozi';
   medTmp(1).id:=1;
   dbms_output.put_line(medTmp(1).name);
 end;

4 将type作为table的属性


 --通过object创建type 不同通过record创建 但是临时变量可以用record
 create or replace type userInfoOther as object (


        id number,--用户id
        cardid number,--身份证号码
        gjjid number,--公积金号码
        sbid number--社保号码
   );
--as table of就相当于创建了一个数组 List<userInfoOther>  里面放置的是userInfoOther类型
create or replace type userList as table of userInfoOther;
--用途 用创建的数组直接定义到表的列上 这里要用到内联表的概念(也就是一个表的另一个列也是一个表 )
--nested table 列名 store as 存储名称;  此时会产生courseInfo 和teacherInfo1 两个表 删除courseInfo 也会自动删除和teacherInfo1

create table courseInfo(
       id number,
       courseName varchar2(20),
       teacherInfo userList--授课老师 可能有多个
) nested table teacherInfo store as teacherInfoList;
--插入数据到表中
declare uio userList:=userList();--定义数组 必须初始化
uinfo userInfoOther:=userInfoOther(null,null,null,null);--定义一个用户对象 必须初始化
begin
  uio.extend();--数据加入一条数据
  uio(1):=userInfoOther(null,null,null,null);--创建一个对象 必须初始化 不然报错
  uio(1).id:=1;--对象赋值
  uio(1).cardid:=1;
  uio(1).gjjid:=1;
  uio(1).sbid:=1;
  uio.extend();
  uio(2):=userInfoOther(null,null,null,null);
  uio(2).id:=2;
  uio(2).cardid:=2;
  uio(2).gjjid:=2;
  uio(2).sbid:=2;
  uinfo.id:=2;
  uinfo.cardid:=2;
  uinfo.gjjid:=2;
  uinfo.sbid:=2;
  uio.extend();
  uio(3):=uinfo;--直接将用户对象放入数组
  insert into courseInfo(id,courseName,teacherInfo)
            values(4,'DDD',uio);
           commit;
end;

查询可以通过 

select * from table(select teacherinfo from courseinfo)

4 通过type来定义表

--通过type创建 userInfo表对象 但是列名和类型不允许更改

CREATE TABLE userinfo OF userInfoOther;  
select * from userinfo
select value(o) from userinfo o


posted @ 2015-09-13 20:53  饺子吃遍天  阅读(771)  评论(0编辑  收藏  举报