8.1.2定义记录类型

来源:互联网 发布:雨伞哪个牌子好 知乎 编辑:程序博客网 时间:2024/06/16 21:28

记录只是一个用来组织其他标量类型的容器,本身是没有值的,它里面的每一个变量拥有自己的值。为了定义记录类型,必须要定义一个记录所包含的标量类型变量的类型,然后声明这种类型的变量,声明记录类型比标量类型多了一个步骤。

TYPE  type_name IS RECORD

(

       field_declaration

);

声明记录类型并赋初始值
为记录赋值并读取记录内容

DECLARE
    TYPE emp_rec IS RECORD(
        empname   VARCHAR2(12)   := '李斯特',
        empno      NUMBER         NOT NULL DEFAULT 7369,
        hiredate  DATE           DEFAULT SYSDATE,
        sal       NUMBER(7,2)    
    );
    --声明emp_rec类型的变量
    empinfo       emp_rec;
BEGIN
    --下面的语句为empinfo记录赋值
    empinfo.empname := '史密斯';
    empinfo.empno   := 7010;
    empinfo.hiredate:=TO_DATE('1982-01-01','YYYY-MM-DD');
    empinfo.sal     :=5000;
    --下面的语句输出empinfo记录值
    DBMS_OUTPUT.put_line('员工名称:'||empinfo.empname);
    DBMS_OUTPUT.put_line('员工编号:'||empinfo.empno);
END;

除了通过为单个记录逐个地赋值之外,还可以为整个记录进行一次性赋值,最常见的方式是将一个记录类型赋予
另一个记录类型的值,
DECLARE
    --定义记录类型
    TYPE emp_rec IS RECORD(
        empno  NUMBER,
        ename  VARCHAR2(20)
    );
    --定义与emp_rec具有相同成员的记录类型
    TYPE emp_rec_dept  IS RECORD(
        empno NUMBER,
        ename VARCHAR2(20)
    );
    --声明记录类型的变量
    emp_info1     emp_rec;
    emp_info2     emp_rec;
    emp_info3     emp_rec_dept;
    --定义一个内嵌过程用来输出记录信息
    PROCEDURE printrec(empinfo emp_rec)
    AS
    BEGIN
        DBMS_OUTPUT.PUT_LINE('员工编号:'||empinfo.empno);
        DBMS_OUTPUT.PUT_LINE('员工名称:'||empinfo.ename);
    END;
BEGIN
    emp_info1.empno := 7890;
    emp_info1.ename := '张大千';
    DBMS_OUTPUT.PUT_LINE('emp_info1的信息如下:');
    printrec(emp_info1);
    emp_info2 := emp_info1;
    DBMS_OUTPUT.PUT_LINE('emp_info2的信息如下:');
    printrec(emp_info2);
END

%ROWTYPE定义的记录赋给标准记录类型
DECLARE
--定义一个与dept表具有相同的记录
TYPE dept_rec IS RECORD(
    deptno  NUMBER(10),
    dname   VARCHAR2(30),
    loc     VARCHAR2(30)
);
--定义基于dept表的记录类型
dep_rec_db  dept%ROWTYPE;
dept_info   dept_rec;
BEGIN
    --使用SELECT语句为记录类型赋值
    SELECT *
      INTO dept_rec_db
      FROM dept
     WHERE deptno = 20;
     --将%ROWTYPE定义的记录赋给标准记录变量
     dept_info := dept_rec_db;
END;
使用SELECT语句为记录赋值
DECLARE
    TYPE emp_rec IS RECORD(
        empno NUMBER(10),
        ename VARCHAR2(30),
        job   VARCHAR2(30)
    );
    --声明记录类型的变量
    emp_info  emp_rec;
BEGIN
    --为记录类型赋值
    SELECT empno,
           ename,
           job
      INTO emp_info
      FROM emp
     WHERE empno = 7369;
     --输出记录类型的值
     DBMS_OUTPUT.PUT_LINE('员工编号:'
                         || emp_info.empno
                         || CHR(13)
                         || '员工名称:'
                         || emp_info.ename
     )
END;




原创粉丝点击