操纵记录类型

来源:互联网 发布:阿里云校园 编辑:程序博客网 时间:2024/05/18 02:40
在Oracle9i之前的版本中,是不能使用记录进行插入或更新的,开发人员必须将
记录中的每个成员的值分别赋给相应的列。现在,程序员可以在INSERT和UPDATE
语句中直接使用记录类型
在INSERT语句中使用记录插入数据
DECLARE
    TYPE dept_rec IS RECORD(
        deptno    NUMBER(2),
        dname   VARCHAR2(14),
        loc     VARCHAR2(13)
    );
    --定义两个记录类型的变量
    dept_row    dept%ROWTYPE;
    dept_norow  dept_rec;
BEGIN
    --为记录类型赋值
    dept_row.deptno := 70;
    dept_row.dname  := '工程部';
    dept_row.loc    := '上海';
    dept_norow.deptno := 80;
    dept_norow.dname  := '电脑部';
    dept_norow.loc    := '北京';
    --插入%ROWTYPE定义的记录变量到表中
    INSERT INTO dept
          VALUES dept_row;
    --插入普通记录变量的值到表中
    INSERT INTO dept
          VALUES dept_norow;
    --向数据库提交对表的更改
    COMMOIT;

END;

在UPDATE语句中使用记录更新数据
DECLARE
    TYPE dept_rec IS RECORD(
        deptno NUMBER(2),
        dname  VARCHAR2(14),
        loc    VARCHAR2(13)
    );
    dept_info  dept_rec;
BEGIN
    SELECT *
      INTO dept_info
      FROM dept
     WHERE deptno = 80;    --使用SELECT语句初始化记录类型
     dept_info.dname := '信息管理部';--更新记录类型
    UPDATE dept
       SET ROW = dept_info
     WHERE deptno = dept_info.deptno;--在UPDATE中使用记录变量更新表
END;

在DML语句中使用RETURNING返回受影响的行
DECLARE
    TYPE dept_rec IS RECORD(
        deptno NUMBER(2),
        dname  VARCHAR2(14),
        loc    VARCHAR2(13)
    );
    dept_info  dept_rec;        --定义记录类型的变量
    dept_returning dept%ROWTYPE;--定义用于返回结果的记录类型
BEGIN
    SELECT *
      INTO dept_info
      FROM dept
     WHERE deptno = 80;
     dept_info.dname := '信息管理部';
    UPDATE dept
       SET ROW = dept_info.deptno
     WHERE deptno = dept_info.deptno
  RETURNING deptno,
              dnaem,
              loc
         INTO dept_returning
  dept_info.deptno := 12;
  dept_info.dname  := '维修部';
  INSERT INTO dept
       VALUES dept_info
    RETURNING deptno,
              dname,
              loc
         INTO dept_returning;
  DELETE FORM dept
        WHERE deptno = dept_info.deptno
     RETURING deptno,
              dname,
              loc
         INTO dept_returning;
END;