PL/SQL:记录类型 (定义,使用,注意点)

来源:互联网 发布:苏州园区一中淘宝地址 编辑:程序博客网 时间:2024/06/07 14:41

RECORD

单行单列    标量变量    单行多列记录    多行单列    集合    多行多列    记录+集合

定义:
       记录有着类似于表的数据结构,是一个或多个字段且拥有数据类型的集合体。
声明一个记录变量相当于一次性定义了多个标量变量,简化了变量的声明,从而大大节省了内存资源。多用于简化单行多列的数据处理


一、定义PL/SQL记录

    1.直接定义

    2.使用%ROWTYPE定义
       使用%ROWTYPE时,记录成员名称和类型与所依赖对象(表,视图,游标)名称和类型 完全相同
       使用%ROWTYPE定义将 大大 节省内存空间
1
        record_name table_name%ROWTYPE
2
        record_name view_name%ROWTYPE
3
        reocrd_name cursor_name%ROWTYPE


二、记录的使用

    1 select 单行 

    2 insert 单行 
1
INSERT INTO dept VALUES dept_record;
2
3
INSERT INTO dept(deptno, dname) VALUES (dept_record.deptno, dept_record.dname);

    3 UPDATE 中使用记录变量及成员

    4 DELETE 中使用记录变量的成员
1
DECLARE
2
    dept_record dept%ROWTYPE;
3
BEGIN
4
    dept_record.deptno:=60;
5
    DELETE FROM dept WHERE deptno=dept_record.deptno;
6
END;


三、PL/SQL记录使用时的几个问题

问题1.记录成员非空值的问题(非空值应当在初始化时赋值,而不是在使用时赋值). 且记录不可以整体判断为null. 只可以判断记录中字段为空

问题2.用同一个类型定义的多个记录可以互相整体赋值 
1
  DECLARE
2
      TYPE ex_type1 IS RECORD(
3
        first_name VARCHAR2(15),
4
        last_name  VARCHAR2(30));
5
      TYPE ex_type2 IS RECORD(
6
        first_name VARCHAR2(15),
7
        last_name  VARCHAR2(30));
8
      ex_rec1 ex_type1;
9
      ex_rec2 ex_type2;
10
    BEGIN
11
      ex_rec1.first_name := 'Robinson';
12
      ex_rec1.last_name  := 'Cheng';
13
      ex_rec2            := ex_rec1;  -- 不合理的赋值方式 PLS-00382: expression is of wrong type
14
    END;
解决:

问题3.记录不可以整体比较,只可以比较记录的字段
1
  IF emprec1 < emprec2 THEN              --错误!
2
  IF emprec1.empno < emprec2.empno THEN  --正确! 记录只可以比较字段

问题4.用%ROWTYPE定义的记录可以用记录直接insert|update. 
         用record()定义的记录只能用记录.列名来insert|update. 
         delete只能用记录点列名来删除