Oracle-33-变量%type、变量%rowtype、记录类型、记录表类型

2023-10-18 16:30

本文主要是介绍Oracle-33-变量%type、变量%rowtype、记录类型、记录表类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、%type变量

当用户事先并不知道检索的数据列的数据类型,可以使用%type定义变量。

比如:SQL>id emp.empno%type 就是将emp表中empno列的数据类型为变量id的数据类型

 

1:练习%type定义未知类型的变量。

解:用student表做:




二、%rowtype变量

%rowtype变量一次可以存储一行数据。

2:练习%rowtype变量。

解:注意下图中的程序:




三、复合类型变量(存储多行数据,可以理解为数组)

1.复合变量

与标量变量对应的就是复合变量。

 

2.复合变量分为以下两种类型

(1)记录类型

记录类型复合变量中可以存储多个标量值,结构与行相似;可以存储由多个列值组成的一行数据。

语法格式:


type 变量名 is record(

…………………………

…………………………

…………………………

);省略号部分是需要存储的数据

 

比如以下程序:


declare

      type emp_record is record(

           id emp.empno%type,

           name emp.empno%type

      );

a emp_record;——定义变量a,类型record,这里有人理解为给emp_record取别名(这有待斟酌)。

begin

      select empno,ename into a from emp where empno = 7935;

      dbms_output.put_line(a.id);

      dbms_output.put_line(a.name);

end;


【注意】type变量名 is record之后括号内的代码,与create table一样,除最后一行以外每行逗号结尾,最后一行末尾不要任何标点符号,最后一行输入完毕,回车,打上左括号、分号,回车结束。标点必须这么做,否则报错。

 

3:练习记录类型复合变量。

解:注意下图中的程序:




(2)记录表类型

该变量类型允许用户在代码中使用“表”,以便存储多个行数据。记录表类型是对记录类型的扩展,可以处理多个记录或多行数据

 

为什么使用记录表类型

答:因为一个记录类型变量只可以存储查询语句返回的一行数据,这就限制了select语句只能返回一行。如果select语句返回多行数据,那么就可以使用记录表类型。所以记录表类型它可以处理或是存储返回的多行数据。

 

语法格式:


type table_name is table of data_type [not null] index by binary_integer;


其中index by binary_integer是该记录表的下标数据类型(类似于数组下标)或称为记录表的长度,table_name是定义记录表名,data_type是定义记录表类型中存储数据的类型。

 

比如如下程序:


declare

      type table_a is table of varchar2(20) index by binary_integer;

      a table_a;

begin

      a(1) := ‘第一个变量值’;

      a(2) := ‘第二个变量值’;

      dbms_output.put_line(a(1));

      dbms_output.put_line(a(2));

end;

 

4:练习记录表类型的复合变量

解:注意下图中的程序:




记录表类型存储值的方式

有一个索引来标识这一行记录,图解如下:




【注意】

(1)索引从1开始,而不是从0开始;

 

记录表提供的方法几种:

1count返回记录表中记录的数量;

2delete删除记录表中的记录,比如a.delete(2)是删除记录表中的第二个值;

3first返回记录表中最小索引值;

4last返回记录表中最大的索引值;

5next返回记录表变量中的下一个索引,当使用该方法的时候,需要传递一个索引值。

 

5:练习以上记录表提供的方法。

解:注意下图中的程序:




由此可见,t.delete(2)删除记录表中第二个数据后记录表总长度不变,原来是5,现在还是5,且后面记录不会前进一个,即原来t(4)是d,现在还是d。

这篇关于Oracle-33-变量%type、变量%rowtype、记录类型、记录表类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/233795

相关文章

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.