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

版权声明:如若转载或他用,望告知 https://blog.csdn.net/qwerdfcv/article/details/80706964
        一般来说,Oracle的数据类型可分为五类,数值类型、字符串类型、日期类型、PL/SQL 类型和自定义类型。而我们用的最多的,一般就是前面三种类型,PL/SQL类型用的应该是非常少的,相对而言,有时我们还会用到自定义类型,而这里,主要要说的就是关于一些自定义类型的知识。
对于自定义类型,通常也会分为两类,一类是子类型,一类是普通类型。

子类型

这种类型最简单,类似类型的一个别名,主要是为了对常用的一些类型简单化,它基于原始的某个类型,如: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进行转换,其他操作与普通表类似。

猜你喜欢

转载自blog.csdn.net/qwerdfcv/article/details/80706964
今日推荐