热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle11gRelease1(11.1)PL/SQL_理解Record类型

若创建records,需要先定义一个RECORD类型,再用该类型声明变量。也可以创建或查找一个表、视图,或PLSQL游标,总之是你想

若创建 records,需要先定义一个 RECORD 类型,再用该类型声明变量。也可以创建或查找一个表、视图,或 PL/SQL 游标,总之是你想

本文内容

  • 定义和声明 Record
  • Record 作为子程序参数和函数返回值
  • 给 Record 赋值
  • 比较 Record
  • 把 Record 插入到数据库
  • 把 Record 更新到数据库
  • Record 插入和更新的约束
  • 把查询数据放到 Record
  • 定义和声明 Record

    若创建 records,需要先定义一个 RECORD 类型,再用该类型声明变量。也可以创建或查找一个表、视图,或 PL/SQL 游标,总之是你想要的值,使用 %ROWTYPE 属性来创建匹配的 Record。

    你可以在任何 PL/SQL 块、子程序或包的声明部分定义 RECORD 类型。当你自定义 RECORD 类型时,不能在域上指定一个 NOT NULL 的约束,或给出它们的默认值。

    示例 1:演示声明和初始化一个简单的 Record 类型

    DECLARE TYPE DeptRecTyp IS RECORD ( deptid NUMBER(4) NOT NULL := 99, dname departments.department_name%TYPE, loc departments.location_id%TYPE, region regions%ROWTYPE ); dept_rec DeptRecTyp;BEGIN dept_rec.dname := 'PURCHASING';END;/

    示例 2:演示声明和初始化 Record 类型

    := -1, name VARCHAR2(64) NOT NULL := '[anonymous]');-- Declare record variables of the types declared rec1 rec1_t; rec2 rec2_t;-- Declare a record variable that can hold-- a row from the EMPLOYEES table.-- The fields of the record automatically match the names and-- types of the columns.-- Don't need a TYPE declaration in this case. rec3 employees%ROWTYPE;-- Or mix fields that are table columns with user-defined fields. TYPE rec4_t IS RECORD (first_name employees.first_name%TYPE, last_name employees.last_name%TYPE, rating NUMBER); rec4 rec4_t;BEGIN-- Read and write fields using dot notation rec1.field1 := 'Yesterday'; rec1.field2 := 65; rec1.field3 := TRUNC(SYSDATE-1);-- Didn't fill name field, so it takes default value DBMS_OUTPUT.PUT_LINE(rec2.name);END;/

    若在数据库存储一个 Record,你可以在 INSERT 或 UPDATE 语句指定,只要它的域与表的列匹配。

    你可以使用 %TYPE 来指定 Record 域类型对应表的列的类型。即使列类型改变了,你的代码仍然可以运行。例如,增加了 VARCHAR2 字段的长度,或 NUMBER 字段的精度。

    示例 3:演示使用 %ROWTYPE 来声明一个 Record,,来保存 department 表的信息

    DECLARE-- Best: use %ROWTYPE instead of specifying each column.-- Use %ROWTYPE instead of

    %ROWTYPE because -- you only want some columns.-- Declaring cursor doesn't run query or affect performance.CURSOR c1 ISSELECT department_id, department_name, location_id FROM departments; rec1 c1%ROWTYPE;-- Use %TYPE in field declarations to avoid problems if -- the column types change. TYPE DeptRec2 IS RECORD (dept_id departments.department_id%TYPE, dept_name departments.department_name%TYPE, dept_loc departments.location_id%TYPE); rec2 DeptRec2;-- Write each field name, specifying type directly-- (clumsy and unmaintainable for working with table data-- use only for all-PL/SQL code). TYPE DeptRec3 IS RECORD (dept_id NUMBER, dept_name VARCHAR2(14), dept_loc VARCHAR2(13)); rec3 DeptRec3;BEGINNULL;END;/

    PL/SQL 可以定义包含对象、集合和其他 Record(内置 Record)的 Record。但 Record 不能是对象类型的属性。

    若声明一个 Record,表示数据库表的一行,则无需列出列,使用 %ROWTYPE 属性。

    当表添加列后,你的代码仍然可以运行。若你想表示一个表列的一个子集,或是不同表的列,则你可以定义一个视图或声明一个游标,来选择右边的列,执行任何需要的连接,再在视图或游标上应用 %ROWTYPE。


    推荐阅读
    • 本文介绍了如何使用 PostgreSQL 的 `UPDATE ... FROM` 语法,通过映射表实现对多行记录进行高效的批量更新。这种方法不仅适用于单列更新,还支持多列的同时更新。 ... [详细]
    • PHP 编程疑难解析与知识点汇总
      本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
    • 构建基于BERT的中文NL2SQL模型:一个简明的基准
      本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
    • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
    • 数据库内核开发入门 | 搭建研发环境的初步指南
      本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
    • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
    • 使用C#开发SQL Server存储过程的指南
      本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
    • 本文探讨了适用于Spring Boot应用程序的Web版SQL管理工具,这些工具不仅支持H2数据库,还能够处理MySQL和Oracle等主流数据库的表结构修改。 ... [详细]
    • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
    • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
    • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
    • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
    • 如何在PostgreSQL中查看数据表
      本文将指导您使用pgAdmin工具连接到PostgreSQL数据库,并展示如何浏览和查找其中的数据表。通过简单的步骤,您可以轻松访问所需的表结构和数据。 ... [详细]
    • 利用存储过程构建年度日历表的详细指南
      本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
    • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
    author-avatar
    天河体育场里的执波仔_287
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有