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的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

Python中异常类型ValueError使用方法与场景

《Python中异常类型ValueError使用方法与场景》:本文主要介绍Python中的ValueError异常类型,它在处理不合适的值时抛出,并提供如何有效使用ValueError的建议,文中... 目录前言什么是 ValueError?什么时候会用到 ValueError?场景 1: 转换数据类型场景

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

Perl 特殊变量详解

《Perl特殊变量详解》Perl语言中包含了许多特殊变量,这些变量在Perl程序的执行过程中扮演着重要的角色,:本文主要介绍Perl特殊变量,需要的朋友可以参考下... perl 特殊变量Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色。特殊变量通常用于存储程序的

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6