Oracle PL / SQL关联数组

PL / SQL支持三种数组,或PL / SQL集合。

关联数组最初称为PL / SQL表。

关联数组允许我们创建单维数组。

关联数组可以基于几乎任何数据类型。

以下PL / SQL过程演示如何声明关联数组或PL / SQL表。

声明关联数组包括两个步骤。

  • 声明新的TYPE。
  • 声明该TYPE的一个新变量。
declare

    TYPE name_table IS TABLE OF EMP.name%TYPE INDEX BY BINARY_INTEGER;
    t_name name_table;
    n_name binary_integer;

begin
  t_name(1)  := 'First';
  t_name(10) := 'Last';
  
  SYS.DBMS_OUTPUT.put_line(t_name(1));
  SYS.DBMS_OUTPUT.put_line(t_name(10));
  SYS.DBMS_OUTPUT.put_line('There are '||t_name.count()||' elements.');
  n_name := t_name.first();
  SYS.DBMS_OUTPUT.put_line('The first element is '||n_name||'.');
  n_name := t_name.next(n_name);
  SYS.DBMS_OUTPUT.put_line('The next element is '||n_name||'.');
  n_name := t_name.last();
  SYS.DBMS_OUTPUT.put_line('The last element is '||n_name||'.');
  n_name := t_name.prior(n_name);
  SYS.DBMS_OUTPUT.put_line('The prior element is '||n_name||'.');
  if t_name.exists(1) then
    SYS.DBMS_OUTPUT.put_line('Element 1 exists.');
  end if;
  SYS.DBMS_OUTPUT.put_line('deleting element 10');
  t_name.delete(10);
  SYS.DBMS_OUTPUT.put_line('There are '||t_name.count()||' elements.');
  SYS.DBMS_OUTPUT.put_line('deleting all elements');
  t_name.delete();
  SYS.DBMS_OUTPUT.put_line('There are '||t_name.count()||' elements.');
end;
/

注意

声明关联数组的语法如下:

TYPE <plsql_table_type_name> IS TABLE OF <data_type> 
INDEX BY BINARY_INTEGER; 

<plsql_table_type_name>是要提供给新的PL / SQL表TYPE的名称,

<data_type>是用于表或关联数组中的元素的数据类型。

使用以下语法声明基于新类型的关联数组:

<variable_name> <plsql_table_type_name>; 

<variable_name>是PL / SQL表的标识符,<plsql_table_type_name>是TYPE的名称。

注意2

关联数组可以是稀疏填充的。

我们不需要连续添加项到数组。

我们可以将它们添加到-2,147,483,647和2,147,483,647之间的任何指数值。

下表列出了PL / SQL表(关联数组)内置函数和过程。

对于PL / SQL表,还可以使用varchar2数据类型作为索引值。

所以在任何你看到的binary_integer的引用,你可以替换它varchar2。

方法描述
count()返回元素的数量
delete(ain_index in binary_integer)删除指定的元素
delete()删除所有元素
exists(ain_index in binary_integer)如果元素存在则返回TRUE; 否则为FALSE
first()返回第一个元素的索引
last()返回最后一个元素的索引
prior(ain_index in binary_integer)返回指定元素之前的第一个元素的索引
next(binary_integer中的ain_index)返回指定元素之后的第一个元素的索引

实例2

以下代码是基于行级锚点的PL / SQL表(关联数组)的示例。

declare
    TYPE name_table IS TABLE OF EMP%ROWTYPE INDEX BY BINARY_INTEGER;
    t_name name_table;
    n_name binary_integer;

begin
  t_name(1).name  := 'CSS';
  t_name(10).name := 'HTML';
  SYS.DBMS_OUTPUT.put_line(t_name(1).name);
  SYS.DBMS_OUTPUT.put_line(t_name(10).name);
  SYS.DBMS_OUTPUT.put_line('There are '||t_name.count()||' elements.');
  n_name := t_name.first();
  SYS.DBMS_OUTPUT.put_line('The first element is '||n_name||'.');
  n_name := t_name.next(n_name);
  SYS.DBMS_OUTPUT.put_line('The next element is '||n_name||'.');
  n_name := t_name.last();
  SYS.DBMS_OUTPUT.put_line('The last element is '||n_name||'.');
  n_name := t_name.prior(n_name);
  SYS.DBMS_OUTPUT.put_line('The prior element is '||n_name||'.');
  if t_name.exists(1) then
    SYS.DBMS_OUTPUT.put_line('Element 1 exists.');
  end if;
  SYS.DBMS_OUTPUT.put_line('deleting element 10');
  t_name.delete(10);
  SYS.DBMS_OUTPUT.put_line('There are '||t_name.count()||' elements.');
  SYS.DBMS_OUTPUT.put_line('deleting all elements');
  t_name.delete();
  SYS.DBMS_OUTPUT.put_line('There are '||t_name.count()||' elements.');
end;
/

注意3

上面的代码使用关键字%ROWTYPE来锚定到基于WORKERS表中的列的复合记录类型。

代码还使用带有点运算符(。)的复合记录的字段名称名称到PL / SQL表的名称和索引,以便将名称值存储在关联数组中。

记录类型

我们可以使用数据类型声明PL / SQL记录。

declare
    TYPE name_record is record (
    first_name                            EMP.first_name%TYPE,
    middle_name                           EMP.middle_name%TYPE,
    last_name                             EMP.last_name%TYPE );

    TYPE name_table is table of name_record index by binary_integer;
    t_name                                name_table;

begin
     t_name(1).first_name  := 'Jack';
     t_name(1).last_name   := 'Smith';
     t_name(2).first_name  := 'Jason';
     t_name(2).last_name   := 'O'Brain';

     SYS.DBMS_OUTPUT.put_line(t_name(1).last_name||', '||t_name(1).first_name);
     SYS.DBMS_OUTPUT.put_line(t_name(2).last_name||', '||t_name(2).first_name);
end;
/

注意4

声明PL / SQL记录的语法如下

TYPE <plsql_record_type_name> IS RECORD ( 
<field_name_1> <data_type_1>, 
<field_name_2> <data_type_2>,... 
<field_name_N> <data_type_N>); 

其中<plsql_record_type_name>是新的PL / SQL记录类型的名称,<field_name>是记录中字段的名称,<data_type>是相应字段的数据类型。

上面的代码使用点运算符(。),后跟记录中字段的名称,以寻址PL / SQL表中的复合数据类型值。

在PL / SQL块中创建复合数据类型的语法是行而不是记录。

然后我们可以将字段引用为列。

TYPE <plsql_row_type_name> IS ROW ( 
<column_name_1> <data_type_1>, 
<column_name_2> <data_type_2>,... 
<column_name_N> <data_type_N>); 

多维数组

以下代码演示了如何在PL / SQL记录中使用PL / SQL表,以便解决一维限制。

declare
    TYPE name_table is table of EMP.name%TYPE index by binary_integer;
    TYPE name_record is record (dim2 name_table );
    TYPE dim1 is table of name_record index by binary_integer;
    t_dim1 dim1;

begin
  t_dim1(1).dim2(1) := 'CSS HTML';
  t_dim1(1).dim2(2) := 'SQL';

  t_dim1(2).dim2(1) := 'Java';
  t_dim1(2).dim2(2) := 'Javascript';

  SYS.DBMS_OUTPUT.put_line(t_dim1(1).dim2(1));
  SYS.DBMS_OUTPUT.put_line(t_dim1(1).dim2(2));
  SYS.DBMS_OUTPUT.put_line(t_dim1(2).dim2(1));
  SYS.DBMS_OUTPUT.put_line(t_dim1(2).dim2(2));
end;
/

 CSDN:程序猿 寄语:
1、作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。
2、程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。
3、编程是一种单调的生活,因此程序员比普通人需要更多的关怀,更多的友情。
4、程序不是年轻的专利,但是,他属于年轻。
5、没有情调,不懂浪漫,也许这是程序员的一面,但拥有朴实无华的爱是他们的另一面。
6、一个好汉三个帮,程序员同样如此。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】已解决:nltk.download(‘stopwords‘) 报错问题

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;nltk.download(‘stopwords’) 报错问题 一、分析问题背景 在使用Python的自然语言处理库NLTK&#xff08;Natural Language Toolkit&#xff09;时&#xff0c…

《向量数据库指南》——Milvus Cloud检索器增强的深度探讨:句子窗口检索与元数据过滤

检索器增强的深度探讨&#xff1a;句子窗口检索与元数据过滤 在信息爆炸的时代&#xff0c;高效的检索系统成为了连接用户与海量数据的关键桥梁。为了进一步提升检索的准确性和用户满意度&#xff0c;检索器增强技术应运而生&#xff0c;其中句子窗口检索与元数据过滤作为两大…

每日一题~oj(贪心)

对于位置 i来说&#xff0c;如果 不选她&#xff0c;那她的贡献是 vali-1 *2&#xff0c;如果选他 &#xff0c;那么她的贡献是 ai. 每一个数的贡献 是基于前一个数的贡献 来计算的。只要保证这个数的前一个数的贡献是最优的&#xff0c;那么以此类推下去&#xff0c;整体的val…

基于自编码器的时间序列异常检测方法(以传感器数据为例,MATLAB R2021b)

尽管近年来研究者对自编码器及其改进算法进行了深入研究&#xff0c;但现阶段仍存在以下问题亟须解决。 1) 无监督学习模式对特征提取能力的限制与有监督学习相比&#xff0c;无监督学习模式摆脱了对样本标签的依赖、避免了人工标注的困难&#xff0c;但也因此失去了样本标签的…

vue3+vite搭建第一个cesium项目详细步骤及环境配置(附源码)

文章目录 1.创建vuevite项目2.安装 Cesium2.1 安装cesium2.2 安装vite-plugin-cesium插件&#xff08;非必选&#xff09;2.3 新建组件页面map.vue2.4 加载地图 3.完成效果图 1.创建vuevite项目 打开cmd窗口执行以下命令&#xff1a;cesium-vue-app是你的项目名称 npm create…

Zkeys三方登录模块支持QQ、支付宝登录

1&#xff0c;覆盖到根目录&#xff0c;并导入update.sql数据库文件到Zkeys数据库里 2. 后台系统权限管理&#xff0c;配置管理员权限-系统类别-找到云外科技&#xff0c;全部打勾 3&#xff0c;后台系统设置找到云外快捷登录模块填写相应的插件授权配置和登录权限配置&#x…

【wordpress教程】wordpress博客网站添加非法关键词拦截

有的网站经常被恶意搜索&#xff0c;站长们不胜其烦。那我们如何屏蔽恶意搜索关键词呢&#xff1f;下面就随小编一起来解决这个问题吧。 后台设置预览图&#xff1a; 设置教程&#xff1a; 1、把以下代码添加至当前主题的 functions.php 文件中&#xff1a; add_action(admi…

Arcgis Api 三维聚合支持最新版API

Arcgis Api 三维聚合支持最新版API 最近有同学问我Arcgis api 三维聚合&#xff0c;官方还不支持三维聚合API&#xff0c;二维可以。所以依旧是通过GraphicLayers 类来实现&#xff0c;可支持最新Arcgis Api版本 效果图&#xff1a;

简单且循序渐进地查找软件中Bug的实用方法

“Bug”这个词常常让许多开发者感到头疼。即使是经验丰富、技术娴熟的开发人员在开发过程中也难以避免遭遇到 Bug。 软件中的故障会让程序员感到挫败。我相信在你的软件开发生涯中&#xff0c;也曾遇到过一些难以排查的问题。软件中的错误可能会导致项目无法按时交付。因此&…

初识STM32:芯片基本信息

STM32简介 STM32是ST公司基于ARM公司的Cortex-M内核开发的32位微控制器。 ARM公司是全球领先的半导体知识产权&#xff08;IP&#xff09;提供商&#xff0c;全世界超过95%的智能手机和平板电脑都采用ARM架构。 ST公司于1987年由意大利的SGS微电子与法国的Thomson半导体合并…

linux软链接和硬链接的区别

1 创建软链接和硬链接 如下图所示&#xff0c;一开始有两个文件soft和hard。使用 ln -s soft soft1创建软链接&#xff0c;soft1是soft的软链接&#xff1b;使用ln hard hard1创建硬链接&#xff0c;hard1是hard的硬链接。可以看到软链接的文件类型和其它3个文件的文件类型是不…

从“移花接木”到“提质增效”——详解嫁接打印技术

嫁接打印&#xff0c;是融合了3D打印与传统制造精髓的创新技术&#xff0c;其核心在于&#xff0c;通过巧妙地将传统模具加工与先进的3D打印技术相结合&#xff0c;实现了模具制造的“提质、增效、降本”。 嫁接打印的定义 简而言之&#xff0c;嫁接打印是一种增减材混合制造的…

uniapp报错--app.json: 在项目根目录未找到 app.json

【问题】 刚创建好的uni-app项目&#xff0c;运行微信小程序控制台报错如下&#xff1a; 【解决方案】 1. 程序根目录打开project.config.json文件 2. 配置miniprogramRoot&#xff0c;指定小程序代码的根目录 我的小程序代码编译后的工程文件目录为&#xff1a;dist/dev/mp…

阿里云Elasticsearch-趣味体验

阿里云Elasticsearch-趣味体验 什么是阿里云Elasticsearch阿里云Elasticsearch开通服务查看Elasticsearch实例配置Kibana公网IP登录Elasticsearch添加测试数据 Kibana数据分析查看数据字段筛选数据页面条件筛选KQL语法筛选保存搜索语句导出筛选结果指定列表展示字段写在最后 什…

multisim中关于74ls192n和DSWPK开关仿真图分析(减法计数器)

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

DAMA学习笔记(四)-数据建模与设计

1.引言 数据建模是发现、分析和确定数据需求的过程&#xff0c;用一种称为数据模型的精确形式表示和传递这些数据需求。建模过程中要求组织发现并记录数据组合的方式。数据常见的模式: 关系模式、多维模式、面向对象模式、 事实模式、时间序列模式和NoSQL模式。按照描述详细程度…

实现资产优化管理:智慧校园资产分类功能解析

在构建智慧校园的过程中&#xff0c;细致入微的资产管理是确保教育资源高效运作的关键一环&#xff0c;而资产分类功能则扮演着举足轻重的角色。系统通过精心设计的分类体系&#xff0c;将校园内的各类资产&#xff0c;从昂贵的教学设备到日常使用的办公物资&#xff0c;乃至无…

S32DS S32 Design Studio for S32 Platform 3.5 代码显示行号与空白符

介绍 NXP S32DS&#xff0c;全称 S32 Design Studio&#xff0c;s32 系列芯片默认使用 S32 Design Studio for S32 Platform 作为 IDE 集成开发环境&#xff0c;当前版本 S32 Design Studio for S32 Platform 3.5&#xff0c;IDE 可以简称 s32DS 使用 S32DS&#xff0c;可以认…

数据结构算法-排序(一)-冒泡排序

什么是冒泡排序 冒泡排序&#xff1a;在原数组中通过相邻两项元素的比较&#xff0c;交换而完成的排序算法。 算法核心 数组中相邻两项比较、交换。 算法复杂度 时间复杂度 实现一次排序找到最大值需要遍历 n-1次(n为数组长度) 需要这样的排序 n-1次。 需要 (n-1) * (n-1) —…

240706_昇思学习打卡-Day18-基于MindSpore的GPT2文本摘要

240706_昇思学习打卡-Day18-基于MindSpore的GPT2文本摘要 今天做一个根据一段文章提取摘要的提取器&#xff0c;基于nlpcc2017摘要数据&#xff0c;内容为新闻正文及其摘要&#xff0c;就是训练集及标签。 首先我们来预装以下MindSpore环境 %%capture captured_output # 实验…