zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    MkDocs: 构建你自己的知识库
    Vue入门
    Vue UI库
    【入门】PyTorch
    【转载】工业相机的原理与选型
    如果你是狮子,就得学会逼狼去吃草
    【转载】剖析Git的实现机制
    管理学-员工管理
    量化投资
    【汇总】图像格式
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331267.html
Copyright © 2011-2022 走看看