zoukankan      html  css  js  c++  java
  • 记录类型(学习笔记)

    定义记录类型

    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;
     
  • 相关阅读:
    python_workone
    python___"TypeError: 'module' object is not callable"
    显示pycharm的行号
    pycharm切换python版本
    yum安装pip
    informix数据库常用命令(转)
    eclipse打不开的解决办法
    linux修改时间大全
    在安装mysqli的时候,出现error: ext/mysqlnd/mysql_float_to_double.h: No such file or directory
    Amazon Linux AMI 2015.09 (HVM)平台搭建lamp
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4220279.html
Copyright © 2011-2022 走看看