码迷,mamicode.com
首页 > 其他好文 > 详细

记录类型(学习笔记)

时间:2015-01-13 15:50:59      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

定义记录类型语法

TYPE 类型名称 IS RECORD (
成员名称 数据类型 [[NOT NULL] [:= 默认值] 表达式] ,
...
成员名称 数据类型 [[NOT NULL] [:= 默认值] 表达式]
) ;

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

   

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;

 

记录类型(学习笔记)

标签:

原文地址:http://www.cnblogs.com/hjiongjiong/p/4221308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!