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

相关文章

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

C#之枚举类型与随机数详解

《C#之枚举类型与随机数详解》文章讲解了枚举类型的定义与使用方法,包括在main外部声明枚举,用于表示游戏状态和周几状态,枚举值默认从0开始递增,也可手动设置初始值以生成随机数... 目录枚举类型1.定义枚举类型(main外)2.使用生成随机数总结枚举类型1.定义枚举类型(main外)enum 类型名字

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1