Oracle Record Variables 记录变量

Oracle Record Variables(Oracle记录变量)是Oracle数据库编程中PL/SQL语言的一个关键特性,它允许开发者将多个相关的、分离的、基本数据类型的变量组合成一个复合数据类型,类似于C语言中的结构体(STRUCTURE)。这种复合数据类型被称为RECORD(记录)。在PL/SQL中,记录变量提供了一种非常灵活和强大的方式来处理来自数据库的行数据。

记录变量Record Variables
您可以通过以下任何一种方式创建记录变量:

  • 定义一个RECORD类型,然后声明该类型的变量。
  • 使用%ROWTYPE声明一个记录变量,该变量表示数据库表或视图的完整行或部分行。
  • 使用%TYPE声明与之前声明的记录变量类型相同的记录变量。

有关语法和语义,请参阅“记录变量声明”。
https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/record-variable-declaration.html#GUID-704FC014-561E-422C-9636-EDCA3B996AAD

Topics 话题

  • 记录变量的初始值
  • 声明记录常量
  • 记录类型
  • 使用%ROWTYPE属性声明项目

一、Oracle Record Variables的概念

Oracle Record Variables定义了一种记录数据类型,允许将多个字段(每个字段都有其数据类型)组合成一个单一的数据结构。这种数据结构可以被用来存储或处理数据库中的一行数据。使用记录变量时,需要在声明部分先定义记录的组成(即记录中包含哪些字段以及每个字段的数据类型),然后声明一个或多个该记录类型的变量,并在执行部分引用这些记录变量本身或其中的成员。

二、Oracle Record Variables的语法

Oracle Record Variables的声明和定义遵循以下基本语法:

TYPE RECORD_NAME IS RECORD (  FIELD1 DATA_TYPE1 [NOT NULL] [:= DEFAULT_VALUE],  FIELD2 DATA_TYPE2 [NOT NULL] [:= DEFAULT_VALUE],  ...  FIELDN DATA_TYPEN [NOT NULL] [:= DEFAULT_VALUE]  
);  VARIABLE_NAME RECORD_NAME;
  • RECORD_NAME 是你定义的记录类型的名称。
  • FIELD1 到 FIELDN 是记录中包含的字段名。
  • DATA_TYPE1 到 DATA_TYPEN 是每个字段对应的数据类型。
  • [NOT NULL] 和 [:= DEFAULT_VALUE] 是可选的,用于指定字段是否可以为空以及默认值。
  • VARIABLE_NAME 是你声明的记录类型变量的名称。

三、Oracle Record Variables的使用

在使用记录变量时,你可以通过.运算符来访问记录中的字段。记录变量常用于存储从数据库中查询出的单行数据,或者作为过程、函数等的参数来传递复杂的数据结构。

3.1、声明记录常量Declaring Record Constant

DECLARETYPE My_Rec IS RECORD (a NUMBER, b NUMBER);r CONSTANT My_Rec := My_Rec(0,1);
BEGINDBMS_OUTPUT.PUT_LINE('r.a = ' || r.a);DBMS_OUTPUT.PUT_LINE('r.b = ' || r.b);
END;
/

在这里插入图片描述
在Oracle Database Release 18c之前,为了实现相同的结果,您必须使用一个函数声明一个记录常量,该函数用其初始值填充记录,然后在常量声明中调用该函数。通过比较这两个示例,您可以观察到,限定表达式通过更简洁的方式提高了程序的清晰度和开发人员的生产力。

CREATE OR REPLACE PACKAGE My_Types AUTHID CURRENT_USER ISTYPE My_Rec IS RECORD (a NUMBER, b NUMBER);FUNCTION Init_My_Rec RETURN My_Rec;
END My_Types;
/
CREATE OR REPLACE PACKAGE BODY My_Types ISFUNCTION Init_My_Rec RETURN My_Rec ISRec My_Rec;BEGINRec.a := 0;Rec.b := 1;RETURN Rec;END Init_My_Rec;
END My_Types;
/
HR@orcl> set serveroutput on
HR@orcl> DECLARE2    r CONSTANT My_Types.My_Rec := My_Types.Init_My_Rec();3  BEGIN4    DBMS_OUTPUT.PUT_LINE('r.a = ' || r.a);5    DBMS_OUTPUT.PUT_LINE('r.b = ' || r.b);6  END;7  /
r.a = 0
r.b = 1PL/SQL procedure successfully completed.

此示例显示了使用位置表示法用限定表达式初始化的记录常数c_small。c_road记录常量使用命名关联符号用限定表达式初始化。

DECLARETYPE t_size IS RECORD (x NUMBER, y NUMBER);c_small  CONSTANT t_size := t_size(32,36);c_large  CONSTANT t_size := t_size(x => 192, y => 292);
BEGINDBMS_OUTPUT.PUT_LINE('Small size is ' || c_small.x  || ' by ' || c_small.y);DBMS_OUTPUT.PUT_LINE('Large size is ' || c_large.x  || ' by ' || c_large.y);
END;
/Small size is 32 by 36
Large size is 192 by 292PL/SQL procedure successfully completed.

3.2、记录类型定义和变量声明

此示例定义了一个名为DeptRecTyp的RECORD类型,为每个字段指定一个初始值。然后,它声明了一个名为dept_rec的该类型变量,并打印其字段。

DECLARETYPE DeptRecTyp IS RECORD (dept_id    NUMBER(4) NOT NULL := 10,dept_name  VARCHAR2(30) NOT NULL := 'Administration',mgr_id     NUMBER(6) := 200,loc_id     NUMBER(4) := 1700);dept_rec DeptRecTyp;
BEGINDBMS_OUTPUT.PUT_LINE('dept_id:   ' || dept_rec.dept_id);DBMS_OUTPUT.PUT_LINE('dept_name: ' || dept_rec.dept_name);DBMS_OUTPUT.PUT_LINE('mgr_id:    ' || dept_rec.mgr_id);DBMS_OUTPUT.PUT_LINE('loc_id:    ' || dept_rec.loc_id);
END;
/

在这里插入图片描述

3.3、带记录字段的记录类型(嵌套记录)

此示例定义了两种RECORD类型,name_rec和contact。类型contact有一个name_rec类型的字段。

DECLARETYPE name_rec IS RECORD (first  employees.first_name%TYPE,last   employees.last_name%TYPE);TYPE contact IS RECORD (name  name_rec,                    -- nested recordphone employees.phone_number%TYPE);friend contact;
BEGINfriend.name.first := 'John';friend.name.last := 'Smith';friend.phone := '1-650-555-1234';DBMS_OUTPUT.PUT_LINE (friend.name.first  || ' ' ||friend.name.last   || ', ' ||friend.phone);
END;
/

在这里插入图片描述

3.4、带Varra动态数组类型的记录类型

这定义了一个VARRAY类型full_name和一个RECORD类型contact。类型contact的一个name字段类型为full_name。
This defines a VARRAY type, full_name, and a RECORD type, contact. The type contact has a field of type full_name.

DECLARETYPE full_name IS VARRAY(2) OF VARCHAR2(20);TYPE contact IS RECORD (name  full_name := full_name('John', 'Smith'),  -- varray fieldphone employees.phone_number%TYPE);friend contact;
BEGINfriend.phone := '1-650-555-1234';DBMS_OUTPUT.PUT_LINE (friend.name(1) || ' ' ||friend.name(2) || ', ' ||friend.phone);
END;
/

在这里插入图片描述

3.5、相同定义的包和本地记录类型

在这个例子中,包pkg和匿名块对RECORD类型rec_type的定义是相同的。该包定义了一个过程print_rec_type,它有一个rec_type参数。匿名块声明包类型的变量r1(pkg.rec_type)和本地类型的变量r2(rec_type)。匿名块可以将r1传递给print_rec_type,但不能将r2传递给print-rec_type。

CREATE OR REPLACE PACKAGE pkg ASTYPE rec_type IS RECORD (       -- package RECORD typef1 INTEGER,f2 VARCHAR2(4));PROCEDURE print_rec_type (rec rec_type);
END pkg;
/
CREATE OR REPLACE PACKAGE BODY pkg ASPROCEDURE print_rec_type (rec rec_type) ISBEGINDBMS_OUTPUT.PUT_LINE(rec.f1);DBMS_OUTPUT.PUT_LINE(rec.f2);END; 
END pkg;
/

包pkg和匿名块调用

DECLARETYPE rec_type IS RECORD (       -- local RECORD typef1 INTEGER,f2 VARCHAR2(4));r1 pkg.rec_type;                -- package typer2     rec_type;                -- local typeBEGINr1.f1 := 10; r1.f2 := 'abcd';r2.f1 := 25; r2.f2 := 'wxyz';pkg.print_rec_type(r1);  -- succeedspkg.print_rec_type(r2);  -- fails
END;
/

在这里插入图片描述
在这里插入图片描述

四、总结

Oracle Record Variables提供了一种灵活且强大的方式来处理数据库中的行数据。通过定义记录类型并声明记录变量,开发者可以方便地存储、处理和传递复杂的数据结构。记录变量在PL/SQL编程中扮演着至关重要的角色,是Oracle数据库编程不可或缺的一部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/375232.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nvidia Isaac Sim跟着教程学习1-加载sim资产包

我是跟着这篇博客学习的,大家可以去他这里面看,下面就是把我认为一些坑的地方提出来,大家借鉴。 学习博客 1.下载sim资产包 注意下载完四个包后,一定要放在Downloads文件夹下,不是默认的中文 下载 文件夹 然后随便在…

旷视AI开源新突破:上传照片即可生成表情包视频!

日前,旷视科技发布了一项新的开源AI人像视频生成框架——MegActor。该框架让用户只需输入一张静态肖像图片和一段视频(如演讲、表情包、rap),便可生成一段表情丰富、动作一致的AI人像视频。生成的视频长度取决于输入的视频长度。与…

【深度学习】基于深度学习的模式识别基础

一 模式识别基础 “模式”指的是数据中具有某些相似特征或属性的事物或事件的集合。具体来说,模式可以是以下几种形式: 视觉模式 在图像或视频中,模式可以是某种形状、颜色组合或纹理。例如,人脸、文字字符、手写数字等都可以视…

基于LSTM的局部特征提取网络算法原理

目录 一、LSTM的基本原理与结构 1. LSTM的核心结构 2. LSTM的工作原理 二、基于LSTM的局部特征提取 1. 输入处理与序列表示 2. LSTM层处理与特征提取 3. 特征提取的优势与应用 三、实现细节与注意事项 1. 数据预处理 2. 网络结构与参数选择 3. 训练策略与正则化 4.…

2023Q1 A股市场投资者持股结构(测算值,流通市值口径)

https://pdf.dfcfw.com/pdf/H301_AP202305291587341564_1.pdf A股投资者结构全景图(2023Q1) 李立峰 SAC NO:S1120520090003 2023年05月29日 请仔细阅读在本报告尾部的重要法律声明 仅供机构投资者使用 证券研究报告 A股投资者结构总览 2 A股投资者结构 个…

数据结构(3.9_1)——特殊矩阵的压缩存储

总览 一维数组的存储结构 如果下标从1开始,则a[i]的存放地址LOC (i-1)*sizeof(ElemType); 二维数组的存储 二维数组也具有随机存储的特性 设起始地址为LOC 在M行N列的二维数组b[M][N]中,若按行优先存储, 则b[i][j]的存储地址的LOC (i*…

【Element-UI 表格表头、内容合并单元格】

一、实现效果&#xff1a; &#x1f970; 表头合并行、合并列 &#x1f970; &#x1f970; 表格内容行、合并列 &#x1f970; thead和tbody分别有单独的合并方法 二、关键代码&#xff1a; <el-table size"mini" class"table-th-F4F6FB" align&qu…

最好的照片恢复软件是什么?您需要了解的十大照片恢复工具

在当今的数字时代&#xff0c;丢失的珍贵照片可能是一件令人心碎的事情。无论是由于意外删除、文件损坏还是意外格式&#xff0c;对专业摄影师和普通拍照爱好者的影响都是巨大的。幸运的是&#xff0c;各种照片恢复软件解决方案可以帮助您恢复这些丢失的记忆。本文根据第一手经…

论文阅读--Simple Baselines for Image Restoration

这篇文章是 2022 ECCV 的一篇文章&#xff0c;是旷视科技的一篇文章&#xff0c;针对图像恢复任务各种网络结构进行了梳理&#xff0c;最后总结出一种非常简单却高效的网络结构&#xff0c;这个网络结构甚至不需要非线性激活函数。 文章一开始就提到&#xff0c;虽然在图像复原…

微调及代码

一、微调&#xff1a;迁移学习&#xff08;transfer learning&#xff09;将从源数据集学到的知识迁移到目标数据集。 二、步骤 1、在源数据集&#xff08;例如ImageNet数据集&#xff09;上预训练神经网络模型&#xff0c;即源模型。 2、创建一个新的神经网络模型&#xff…

python基础篇(9):模块

1 模块简介 Python 模块(Module)&#xff0c;是一个 Python 文件&#xff0c;以 .py 结尾. 模块能定义函数&#xff0c;类和变量&#xff0c;模块里也能包含可执行的代码. 模块的作用: python中有很多各种不同的模块, 每一个模块都可以帮助我们快速的实现一些功能, 比如实现…

概论(二)随机变量

1.名词解释 1.1 样本空间 一次具体实验中所有可能出现的结果&#xff0c;构成一个样本空间。 1.2 随机变量 把结果抽象成数值&#xff0c;结果和数值的对应关系就形成了随机变量X。例如把抛一次硬币的结果&#xff0c;正面记为1&#xff0c;反面记为0。有变量相对应的就有自…

SpringBoot实战:轻松实现接口数据脱敏

一、接口数据脱敏概述 1.1 接口数据脱敏的定义 接口数据脱敏是Web应用程序中一种保护敏感信息不被泄露的关键措施。在API接口向客户端返回数据时&#xff0c;系统会对包含敏感信息&#xff08;如个人身份信息、财务数据等&#xff09;的字段进行特殊处理。这种处理通过应用特…

多个版本JAVA切换(学习笔记)

多个版本JAVA切换 很多时候&#xff0c;我们电脑上会安装多个版本的java版本&#xff0c;java8&#xff0c;java11&#xff0c;java17等等&#xff0c;这时候如果想要切换java的版本&#xff0c;可以按照以下方式进行 1.检查当前版本的JAVA 同时按下 win r 可以调出运行工具…

WMS系统的核心功能

WMS系统&#xff08;Warehouse Management System&#xff09;的核心功能主要包括以下几个方面&#xff1a; ———————————————————————— 1、库存管理&#xff1a; 1):跟踪库存数量、位置和状态&#xff0c;确保实时库存可见性。 2):支持批次管理、序列…

文心快码——百度研发编码助手

介绍 刚从中国互联网大会中回来&#xff0c;感受颇深吧。百度的展商亮相了文心快码&#xff0c;展商人员细致的讲解让我们一行了解到该模型的一些优点。首先&#xff0c;先来简单介绍一下文心快码吧。 文心快码&#xff08;ERNIE Code&#xff09;是百度公司推出的一个预训练…

【STM32标准库】读写内部FLASH

1.内部FLASH的构成 STM32F407的内部FLASH包含主存储器、系统存储器、OTP区域以及选项字节区域。 一般我们说STM32内部FLASH的时候&#xff0c;都是指这个主存储器区域&#xff0c;它是存储用户应用程序的空间。STM32F407ZGT6型号芯片&#xff0c; 它的主存储区域大小为1MB。其…

ppt翻译免费怎么做?5个方法让你秒懂PPT的内容

当你收到一份来自海外的PPT资料&#xff0c;眼前或许是一片陌生的语言海洋&#xff0c;但别让这成为理解与灵感之间的障碍。 这时&#xff0c;一款优秀的PPT翻译软件就如同你的私人导航员&#xff0c;能迅速将这份知识宝藏转化为你熟悉的语言&#xff0c;让每一个图表、每一段…

Unity引擎制作玻璃的反射和折射效果

Unity引擎制作玻璃球玻璃杯 大家好&#xff0c;我是阿赵。   之前做海面效果的时候&#xff0c;没做反射和折射的效果&#xff0c;因为我觉得过于复杂的效果没有太大的实际作用。这方面的效果&#xff0c;我就做了现在这个例子来补充一下。 在这个demo场景里面&#xff0c;我…

社交媒体数据分析:赋能企业营销策略的利器

一、数据&#xff1a;未来的石油与导航仪 在数字化转型的大潮中&#xff0c;数据已成为推动企业发展的新燃料。它不仅是决策的依据&#xff0c;更是预见未来的水晶球。特别是在社交媒体这片广袤的海洋里&#xff0c;每一条帖子、每一次点赞、评论都蕴藏着消费者的偏好、市场的…