记录类型(学习笔记)

定义记录类型

TYPE 类型名称 IS RECORD (

成员名称 数据类型 [[NOT NULL] [:= 默认值] 表达式] ,

...

成员名称 数据类型 [[NOT NULL] [:= 默认值] 表达式]

) ;

 

示例一、记录类型接收查询返回结果

--使用记录类型接收查询返回结果

DECLARE

  V_ENO EMP.EMPNO%TYPE;

  TYPE EMP_TYPE IS RECORD( --定义记录类型

    ENAME    EMP.ENAME%TYPE,

    JOB      EMP.JOB%TYPE,

    HIREDATE EMP.HIREDATE%TYPE,

    SAL      EMP.SAL%TYPE,

    COMM     EMP.COMM%TYPE

    

    );

  V_EMP EMP_TYPE; --定义一个指定的复合类型变量

BEGIN

  V_ENO := &ENO;

  SELECT ENAME, JOB, HIREDATE, SAL, COMM

    INTO V_EMP

    FROM EMP

   WHERE EMPNO = V_ENO;

  DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' 员工编号:' || V_ENO || ' 姓名:' ||

                       V_EMP.ENAME || ' 职位:' || V_EMP.JOB || ' 入职日期:' ||

                       TO_CHAR(V_EMP.HIREDATE, 'yyyy-mm-dd') || ' 基本工资:' ||

                       V_EMP.SAL || ' 佣金:' || NVL(V_EMP.COMM, 0));

  EXCEPTION

    WHEN OTHERS THEN

      raise_application_error(-20009,'此员工信息不存在');



END;

示例二、

DECLARE

     TYPE dept_type IS RECORD(

          deptno           dept.deptno%TYPE:=99,--定义默认值

          dname            dept.dname%TYPE,

          loc               dept.loc%TYPE

     );

     v_dept         dept_type;

BEGIN

         v_dept.dname:='TT';         --为记录类型成员赋值

         v_dept.loc:='上海';

         dbms_output.put_line('部门编号:'||v_dept.deptno||' 部门名称:'||v_dept.dname||' 部门位置:'||v_dept.loc);

END;

示例三、定义嵌套的记录类型

DECLARE

  TYPE DEPT_TYPE IS RECORD(

    DEPTNO DEPT.DEPTNO%TYPE := 99, --定义默认值

    DNAME  DEPT.DNAME%TYPE,

    LOC    DEPT.LOC%TYPE);

  TYPE EMP_TYPE IS RECORD( --定义记录类型

    EMPNO    EMP.EMPNO%TYPE,

    ENAME    EMP.ENAME%TYPE,

    JOB      EMP.JOB%TYPE,

    HIREDATE EMP.HIREDATE%TYPE,

    SAL      EMP.SAL%TYPE,

    COMM     EMP.COMM%TYPE,

    DEPT     DEPT_TYPE);

  V_EMP EMP_TYPE;

BEGIN

  SELECT E.EMPNO,

         E.ENAME,

         E.JOB,

         E.HIREDATE,

         E.SAL,

         E.EMPNO,

         D.DEPTNO,

         D.DNAME,

         D.LOC

    INTO V_EMP.EMPNO,

         V_EMP.ENAME,

         V_EMP.JOB,

         V_EMP.HIREDATE,

         V_EMP.SAL,

         V_EMP.COMM,

         V_EMP.DEPT.DEPTNO,

         V_EMP.DEPT.DNAME,

         V_EMP.DEPT.LOC

    FROM EMP E, DEPT D

   WHERE E.EMPNO = D.DEPTNO(+)

     AND EMPNO = &EMPNO;

  DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' 员工编号:' || V_EMP.EMPNO || ' 姓名:' ||

                       V_EMP.ENAME || ' 职位:' || V_EMP.JOB || ' 入职日期:' ||

                       TO_CHAR(V_EMP.HIREDATE, 'yyyy-mm-dd') || ' 基本工资:' ||

                       V_EMP.SAL || ' 佣金:' || NVL(V_EMP.COMM, 0));

  DBMS_OUTPUT.PUT_LINE('部门编号:' || V_EMP.DEPT.DEPTNO || ' 部门名称:' ||

                       V_EMP.DEPT.DNAME || ' 部门位置:' || V_EMP.DEPT.LOC);

END;

示例四、增加一条新的记录

DECLARE

  TYPE DEPT_TYPE IS RECORD(

    DEPTNO DEPT.DEPTNO%TYPE, --定义默认值

    DNAME  DEPT.DNAME%TYPE,

    LOC    DEPT.LOC%TYPE

    );

    V_DEPT DEPT_TYPE;

BEGIN

  V_DEPT.deptno:=&deptno;

  V_DEPT.DNAME:='&dname'; --为记录类型成员赋值

  V_DEPT.LOC:='&loc';

 INSERT INTO dept VALUES v_dept;                   --直接插入记录类型 

END;

示例五、修改一条记录

DECLARE

  TYPE DEPT_TYPE IS RECORD(

    DEPTNO DEPT.DEPTNO%TYPE, --定义默认值

    DNAME  DEPT.DNAME%TYPE,

    LOC    DEPT.LOC%TYPE

    );

    V_DEPT DEPT_TYPE;

BEGIN

  V_DEPT.deptno:=&deptno;

  V_DEPT.DNAME:='&dname'; --为记录类型成员赋值

  V_DEPT.LOC:='&loc';

UPDATE dept SET ROW=v_dept WHERE deptno=v_dept.deptno;

EXCEPTION

  WHEN OTHERS THEN

    dbms_output.put_line('没有这个部门');

   

END;

 

 

你可能感兴趣的:(学习笔记)