Oracle Record & Table Type (行与表对象类型用法)

7 篇文章 0 订阅
6 篇文章 0 订阅

对于自定义类型,通常也会分为两类,一类是子类型,一类是普通类型。

子类型

这种类型最简单,类似类型的一个别名,主要是为了对常用的一些类型简单化,它基于原始的某个类型,如:number(16,2)。
子类型实现定义的全局化:subtype gn_num is number(16,2);

普通类型

普通类型的定义很多,这里主要对Record & Table两种类型做一些入门讲解。

Record类型

首先,需要创建一个简单的Record类型:

TYPE gr_test_rec IS RECORD(
    test_id   NUMBER,
    test_name VARCHAR2(10));--全局类型

它的使用也很简单,只需在具体方法中使用这个全局类型去定义字段就好了,如下:

  PROCEDURE test_pro(x_out_str OUT VARCHAR2) IS
    lr_test_rec gr_test_rec;
  BEGIN
    --初始化类型
    lr_test_rec.test_id   := 1;
    lr_test_rec.test_name := 'Test';
  
    --使用类型值
    BEGIN
      SELECT lr_test_rec.test_id || '-' || lr_test_rec.test_name
        INTO x_out_str
        FROM dual
       WHERE 1 = 1;
    EXCEPTION
      WHEN OTHERS THEN
        x_out_str := NULL;
    END;
  END;

清空类型数据

lr_test_rec := null;

Table类型

这里创建的Table类型与上面说的内容相关联,就是利用Record类型来创建。

TYPE gt_test_rec_tbl IS TABLE OF gr_test_rec INDEX BY BINARY_INTEGER;--全局类型

用法:

  PROCEDURE test_pro(x_out_str OUT VARCHAR2) IS
    lr_test_rec     gr_test_rec;
    lt_test_rec_tbl gt_test_rec_tbl;
  BEGIN
  
    --初始化类型
    lr_test_rec.test_id   := 1;
    lr_test_rec.test_name := 'Test';
  
    --赋值
    lt_test_rec_tbl(1) := lr_test_rec;
  
    --Table类型使用
    FOR i IN 1 .. lt_test_rec_tbl.count LOOP
      x_out_str := lt_test_rec_tbl(i).test_id || '-' || lt_test_rec_tbl(i).test_name;
      EXIT;
    END LOOP;
  
    --清空数据
    lt_test_rec_tbl.delete;
  END;

补充

通过对象创建Table

首先创建一个对象类型

CREATE OR REPLACE TYPE type_obj AS OBJECT(id NUMBER, obj_name VARCHAR2(8));

然后创建一张表

create table obj_table of type_obj;

用法:

--插入数据
INSERT INTO obj_table SELECT type_obj(1, 'test') FROM dual;

--查询数据
SELECT * FROM obj_table;

--更新数据
UPDATE obj_table SET obj_name = 'test1' WHERE id = 1;

--删除数据
DELETE FROM obj_table;

注意:这里需要注意的是插入的数据需要用type_obj进行转换,其他操作与普通表类似。

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琳妹妹的辉哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值