记录类型(学习笔记)

定义记录类型

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;
时间: 2024-10-23 08:12:02

记录类型(学习笔记)的相关文章

《C#高级编程》【第三章】对象和类型 -- 学习笔记

在看过C++之后,再看C#的面向对象感觉就不难了,只是有一些区别而已. 1.类定义 使用class关键字来声明类,其和C++不同的地方是在大括号之后不需要冒号 class 类名 { //类的内部 } //C++这里有一个冒号,而C#没有 2.类成员 3.字段与属性 首先我们先区分一下C#数据成员中的字段.常量与事件成员.字段.常量是与类的相关变量.事件是类的成员,在发生某些行为时(如:改变类的字段或属性,或进行某种形式的用户交互操作),它可以让对象通知调用方. 那么现在我们在来看看字段与属性,属

Linux文件类型(学习笔记六)

一.Linux下的文件类型 普通文件:在由 ls –al 所显示出来的属性方面,第一个属性为 [ - ] 目录文件:在由 ls –al 所显示出来的属性方面,第一个属性为 [ d ] 设备文件:一般都在dev目录,有[b][c] 二.普通文件 2.1.文本文件 以ASCII码形式存储在计算机中 2.2.二进制文件 以文本的二进制形式存储在计算机中,如声音,图像等,只有通过相应的软件才能将其显示出来 2.3.连接文件 就是类似 Windows 底下的快捷方式啦!第一个属性为 [ l ]: 三.目录

《JS高程》事件类型学习笔记

事件类型: UI事件&焦点事件: 鼠标滚轮事件: 键盘与文本事件: 复合事件&变动事件: HTML5事件: 设备事件&触摸与手势事件:

javascript Date类型 学习笔记

1 创建一个新的日期对象,如果不带参数,则对象自动获得当前的日期和时间 var d = new Date() 2 如果需要指定特定的日期,则可以通过Date.parse() 或者 Date().UTC(),返回时间戳作为 new Date()的参数 Date.parse() 用法: var time = Date.parse('2015/05/20'); var newDate = new Date(time);//Wed May 20 2015 00:00:00 GMT+0800 (中国标准时

【C#学习笔记】No.001 初识.NET Framework

关于贵客访问<C#学习笔记>的温馨提示: 本笔记用于个人学习C#技术的知识点.实例练习记录与心得记录 鄙人愿意和喜欢相关技术或者正打算学习C#的朋友进行交流学习 由于是个人是初次学习且该记录为学习笔记,所以难免会有错误或者不清晰的地方,这些地方会在后面的学习中不断改正和改善 对于已经出现的错误,也希望来到博客的人能指出并提示我或指导我,在此感谢大家了 对于决定共同学习的朋友(零基础),请看一下以下提示: 初学者不要过于钻牛角尖,鄙人的学习笔记都是从最基础的开始做的,有理论也有实例 每篇开头会有

Postman使用教程学习笔记

刚加入网页测试行列,最近在学习POSTman的使用教程,记录下学习笔记. Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.当开发人员需要调试一个网页是否运行正常,并不是简简单单地调试网页的HTML.CSS.脚本等信息是否运行正常,更加重要的是网页能够正确是处理各种HTTP请求,毕竟网页的HTTP请求是网站与用户之间进行交互的非常重要的一种方式,在动态网站中,用户的大部分数据都需要通过HTTP请求来与服务器进行交互.无论是web前端开发 或 android.ios开

.NET学习笔记(1)— C#学习路线图

目录 一:引言 二:.NET技术体系 三:常用工具汇总 四:学习资源汇总 五:书籍推荐 六:关于阅读技术书籍的经验 七:总结 一:引言 因为工作调整,从PHP开发零基础转型到.NET开发,前期没有太多空闲时间去系统学习.只好独辟蹊径,寻找快速掌握满足当前需求的方法,和大家分享: <一>:先搜集.NET平台重点知识点的概念名称,然后通过网络搜集该知识点的学习资料,尽可能宏观地了解这个全新技术体系的语法结构,涉及的编程练习题反复练习: <二>:逐行阅读工程源代码,再通过网络学习遇到的知

初学者的python学习笔记1

推荐一段时间闲的蛋疼,总觉得再堕落下去不太好,便捡起了之前一直想学而没有学的python,以此记录一下学习笔记,同时亦是督促和复习. 学习51cto上的<2016最新Python开发基础课程-2.0版本>的视频版本,之所以看视频是因为视频讲解感觉会比看书清晰一些,不过详细还要找各种资料补充. ------------------------------------------------------------------------------------------------------

MVC学习笔记索引帖

[MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现 [MVC学习笔记]2.使用T4模板生成其他类的具体实现 [MVC学习笔记]3.使用Spring.Net应用IOC(依赖倒置) [MVC学习笔记]4.使用Log4Net来进行错误日志的记录 [MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验) [MVC学习笔记]6. 使用Memcache+Cookie解决分布式系统共享登录状态 [MVC学习笔记]7.使用极验验证来制作更高逼格的验证码