当前位置: 代码迷 >> 综合 >> Oracle Record Table Type (行与表对象类型用法)
  详细解决方案

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

热度:41   发布时间:2023-12-14 15:29:47.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) ISlr_test_rec gr_test_rec;BEGIN--初始化类型lr_test_rec.test_id   := 1;lr_test_rec.test_name := 'Test';--使用类型值BEGINSELECT lr_test_rec.test_id || '-' || lr_test_rec.test_nameINTO x_out_strFROM dualWHERE 1 = 1;EXCEPTIONWHEN OTHERS THENx_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) ISlr_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 LOOPx_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进行转换,其他操作与普通表类似。

 

 

 

  相关解决方案