当前位置: 代码迷 >> Oracle开发 >> 记要类型(学习笔记)
  详细解决方案

记要类型(学习笔记)

热度:123   发布时间:2016-04-24 06:31:02.0
记录类型(学习笔记)

定义记录类型

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;

 

 
  相关解决方案