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

    定义记录类型语法

    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;

  • 相关阅读:
    C#获取屏幕鼠标所指点的颜色
    C#连接SQLServer数据库基本实现
    论文摘要写法
    红黑树
    递归、迭代和分治法
    逻辑右/左移与算术右/左移
    C 中数字数据类型在不同机器上所占字节数
    十进制转十六进制
    c带头结点的单链表逆置
    求一维数组长度误区
  • 原文地址:https://www.cnblogs.com/hjiongjiong/p/4221308.html
Copyright © 2011-2022 走看看