如何在 PL/SQL 中对关联数组进行排序?

2023-11-24

我有一个像这样的关联数组:

continent_population('Australia') := 30;
continent_population('Antarctica') := 90;
continent_population('UK') := 50;

如何在 PL/SQL 中的值之后对该数组进行排序?谢谢!


您无法按值对关联数组进行排序,但必须将数据转换为其他数据结构并在那里进行排序。最简单的方法是转换为另一个关联数组,其中键和值交换位置,但这要求您的键值也应该是唯一的。

以下是根据您的情况改编的示例对 PL/SQL 集合进行排序。请查看该文章了解详细信息。

/* The sorting is done with SQL thus these types have to be SQL types. */

create type sortable_t is object(
  continent varchar2(32767),
  population number
);
/

create type sortable_table_t is table of sortable_t;
/

declare
  type continent_population_t is table of pls_integer index by varchar2(32767);
  continent_population continent_population_t;

  i varchar2(32767);

  sorted sortable_table_t := sortable_table_t();
begin
  /* Populate original data. */

  continent_population('Australia') := 30;
  continent_population('Antarctica') := 90;
  continent_population('UK') := 50;
  continent_population('USA') := 50;

  /* Convert to a helper data type that is used for sorting. */

  i := continent_population.first;

  while i is not null loop
    sorted.extend(1);
    sorted(sorted.last) := new sortable_t(i, continent_population(i));
    i := continent_population.next(i);
  end loop;

  /* Show that the content is not sorted yet. */

  dbms_output.put_line('Unsorted:');
  for j in sorted.first .. sorted.last loop
    dbms_output.put_line(sorted(j).continent || ' = ' || sorted(j).population);
  end loop;

  /* Sorting with SQL. */

  select cast(multiset(select *
                       from table(sorted)
                       order by 2 asc, 1 asc)
              as sortable_table_t)
    into sorted
    from dual;

  /* Show that the content is now sorted. */

  dbms_output.put_line('Sorted by value:');
  for j in sorted.first .. sorted.last loop
    dbms_output.put_line(sorted(j).continent || ' = ' || sorted(j).population);
  end loop;

end;
/

Prints:

Unsorted:
Antarctica = 90
Australia = 30
UK = 50
USA = 50
Sorted by value:
Australia = 30
UK = 50
USA = 50
Antarctica = 90
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PL/SQL 中对关联数组进行排序? 的相关文章

  • 如何查看任意 Oracle 会话正在使用的事务隔离级别

    我试图找出特定会话 不是我自己的会话 在 Oracle 服务器上的隔离级别 有 v 视图可以得到这个吗 您可以在中测试位 28flag列于v transaction 1 http forums oracle com forums threa
  • 转置和聚合 Oracle 列数据

    我有以下数据 Base End RMSA Item 1 RMSA Item 2 RMSA Item 3 RMSB Item 1 RMSB Item 2 RMSC Item 4 我想将其转换为以下格式 Key Products RMSA RM
  • 如何在oracle中获取表作为输出参数

    我正在尝试将 Oracle 过程调用的 out 参数强制转换为对象 它不起作用 因为 据我了解 我需要定义一个映射 它告诉方法如何转换它 如果地图为空或未正确填充 则它默认为 STRUCT 类型的对象 在我的情况下这是错误的 我已经构建了一
  • Hashset - 创建 Set 后使对象相同

    如果我们在 HashSet 中添加两个不同的对象 可变的 然后通过调用 setter 更改对象的值 使它们相同 则大小仍然是 hashSet 的 2 我无法理解其原因 public static void main String args
  • 调整 Oracle 数据库以加快启动速度(闪回)

    我正在使用 Oracle 数据库 11 2 我有一个场景 我发出FLASHBACK DATABASE经常 似乎有一个FLASHBACK DATABASECycle 会重新启动数据库实例 大约需要 1 分钟 我的设置花了 7 秒 数据库很小
  • 在java中执行匿名pl/sql块并获取结果集

    我想执行匿名 PL SQL 并需要获取结果集对象 我得到了可以通过在 PL SQL 块内使用游标来完成的代码 但 PL SQL 块本身将以文本形式来自数据库 所以我无法编辑该 PL SQL 块 并且它只会返回两个值 其列名始终相同 它将返回
  • 如何在 Hibernate 中使用 Oracle 查询提示

    我试图在 Hibernate 中使用 Oracle 提示来调用强制索引 但在 Hibernate 3 6 10 Final 中没有找到任何合适的 API 我以某种方式尝试了 Hibernate 标准中的预测 proList add Proj
  • Oracle SQL——从字符串中删除部分重复项

    我有一个表 其中有一列包含字符串 如下所示 static text here 1abcdefg1abcdefgpxq 从这个字符串1abcdefg重复两次 所以我想删除该部分字符串 然后返回 static text here 1abcdef
  • 在 plsql 中立即执行

    如何从这段代码中得到结果 EXECUTE IMMEDIATE SELECT FROM table name through for loop 通常的方法看起来像这样 for items in select from this table l
  • 我可以从匿名 PL/SQL 块向 PHP 返回值吗?

    我正在使用 PHP 和 OCI8 执行匿名 Oracle PL SQL 代码块 有没有什么方法可以让我绑定一个变量并在块完成后获取其输出 就像我以类似的方式调用存储过程时一样 SQL declare something varchar2 I
  • 如何在新的数据库服务器上导入 Oracle 11g RMAN 备份集?

    我有一个使用 RMAN 创建的 Oracle 11g 数据库的备份集 现在我想将备份集导入 恢复到新的空数据库服务器上 我知道创建备份集的命令是 run backup as compressed backupset database tag
  • 使用绑定和空值命中 Oracle 索引的最佳查询

    我有一个表 该表在多个列上有一个索引 其中许多列可以为空 CREATE UNIQUE INDEX UX MYTABLE A B C D E ON MYTABLE A B C D E 现在 我在 C 代码中尝试检查该表并精确命中索引 对于每个
  • sql server GO 相当于 oracle

    我正在为 Oracle 编写迁移脚本 我需要更改表结构 然后用数据填充它 我想先进行结构更改 然后再进行数据更改 在 SQL Server 中我会使用GO分离批次 是否有 SQL ServerGOOracle 中的等效命令 It s and
  • 创建 SYS_REFCURSOR 并将其作为输入参数从 Java 传递给 Oracle 过程

    我必须与具有 SYS REFCURSOR 作为输入参数的外部 Oracle 过程进行通信 过程 merge objects varchar2 中的 p table name p id array 中 varchar2 SYS REFCURS
  • 将链接对象转换为流或集合

    我想迭代堆栈跟踪 堆栈跟踪由可抛出对象组成 其 getCause 返回下一个可抛出对象 最后一次调用 getCause 返回 null 示例 a gt b gt null 我尝试使用 Stream iterable 这会导致 NullPoi
  • Oracle:如果表存在

    我正在为 Oracle 数据库编写一些迁移脚本 并希望 Oracle 有类似于 MySQL 的东西IF EXISTS构造 具体来说 每当我想删除 MySQL 中的表时 我都会执行类似的操作 DROP TABLE IF EXISTS tabl
  • 使用 gv$session 判断查询是否挂起

    我有一个在 Oracle 中运行的查询 该查询可能会挂起 也可能不会挂起 它现在已经运行了大约 10 个小时 但根据我正在加载的数据量 这可能并非不合理 我正在查看 gv session 中的会话 想知道是否有一种方法可以转换该信息以查看是
  • 当我输入 dateadd 或 datediff 代码时,我总是收到此错误“ORA-00904“DATEADD”无效标识符。”

    我有一个大学项目 并且有一个包含入院和出院日期属性的患者表 我需要删除超过 7 年的记录 我使用了以下代码 delete from patient where dis date gt datedadd yy 7 getdate 我收到错误
  • 如何将整行(在 SQL 中,而不是 PL/SQL 中)传递给存储函数?

    我遇到以下 非常简单 问题 我想编写一个 Oracle SQL 查询 大致如下 SELECT count MyFunc MyTable FROM MyTable GROUP BY MyFunc MyTable 在 PL SQL 中 可以使用
  • java中的单链表和双向链表?

    在java中 哪个集合接口可以有效地实现单链表和双向链表 请问代码示例吗 毫不奇怪 实现双向链表的正确接口是 LinkedList 看Java文档 http docs oracle com javase 8 docs api java ut

随机推荐

  • 如何扩展/膨胀 numpy 数组?

    我正在执行图像分析并以布尔值的形式生成种子array import numpy as np Example output array a np array False False False False True False False F
  • 布尔恒等 == True 与 is True

    这是使用的标准约定if foo is None而不是if foo None测试一个值是否是特定的None 如果你想确定一个值是否精确True 不仅仅是一个类似真实的值 有什么理由使用if foo True而不是if foo is True
  • 如何在C#中对数组列表的元素进行排序

    我有一个 ArrayList 其中包含 0 1 1 10 2 2 3 15 4 17 5 5 6 6 7 27 8 8 9 9 现在我需要对数组列表进行排序 使其变为 0 1 1 2 2 5 3 6 4 8 5 9 6 10 7 15 8
  • 如何在 flutter 应用程序中实现 reCaptcha

    我正在尝试在我的 flutter 应用程序中实现 reCaptcha 功能 但在验证码注册中 我需要提供一个域 而我没有用于移动应用程序的域 我浏览过一些指导如何在移动应用程序中实现 reCaptcha 的指南 但这些指南使用包名称而不是域
  • 添加非mvc路由时Html.ActionLink构造错误链接

    我这里有一个混合了 webform 和 mvc 的应用程序 我指定路由如下 routes Add AspxRoute new Route Upload New new WebFormRouteHandler
  • 给定时间内的 Cron 作业和随机时间

    我需要能够每天在完全随机的时间运行 PHP 脚本 20 次 我还希望它仅在上午 9 点至晚上 11 点之间运行 我熟悉在 Linux 中创建 cron 作业 如何在上午 9 点到晚上 11 点之间每天随机执行 20 次定时任务 这在 cro
  • 防止 UIAlertView 关闭

    作为一种验证形式 有什么方法可以防止按下 确定 按钮时警报视图消失 场景 我在警报视图中有 2 个用于用户名 密码的文本字段 如果两者都是空并且用户按 确定 我不希望警报被解除 iOS 5 引入了一个新属性UIAlertView来准确处理这
  • 从哪里开始使用 CPanel 托管在 PHP 中运行命令行

    我正在查看一些 PayPal 脚本 代码示例 其中很多需要通过命令行运行的 php 脚本 我以前从未在 PHP 中从命令行运行过任何东西 所以根本不知道从哪里开始 我不知道我是否使用了正确的搜索词 因为谷歌没有帮助我回答 我是否需要使用不同
  • 如何安全地读取不受信任的 Clojure 代码(不仅仅是一些序列化数据)?

    def evil code str slurp mnt src git clj clojure src clj clojure core clj def r read string evil code 有效 但不安全 def r cloju
  • 为已安装的 Rails 引擎设置 default_url_options

    使用 Rails 3 2 13 和 spree 2 0 2我遇到过类似的问题动态范围内的导轨安装式发动机 我的路线 scope locale locale en jp do mount Spree Core Engine at store
  • 推送或弹出时应用程序在 ios 8 上冻结

    我的应用程序有一个大问题 主要是在 iOS 8 上 因为我们在其他 iOS 版本上没有发现这一点 当推送到新的视图控制器或弹出到以前的视图控制器时 它有时会冻结 但奇怪的是 如果您按主页按钮并从后台启动应用程序 它会运行一点 这里我的意思是
  • 如何正确处理 R 中的转义 Unicode 字符破折号 (—)

    我在处理 R 中转义的 unicode 字符时遇到问题 特别是从 MediaWiki API 获取信息时遇到的问题 我会找到一个 JSON 字符串 例如 query categorymembers ns 0 title Banach u20
  • 有哪些 iPhone 推送通知服务? (托管服务,而不是 APNS)[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 在处理 Apple 的推送
  • 分析蓝牙低功耗流量

    在尝试研究 BLE 时 我想知道是否可以通过 Wireshark 和 snort 等工具对其进行分析 我遇到过一个名为 ubertooth 的 USB 设备 我们需要购买该设备才能在 BLE 框架上执行 DPI 对吧 是否可以在 Wires
  • 如何在 zend Framework 2 中创建工厂?

    in my Module php我有以下方法 我想将它们移动到factory class这样我就不会弄乱Module class public function getControllerConfig return array factor
  • 图形 API 新提要帖子对象 - 附件未显示

    我在图形 API 方面遇到了一个奇怪的问题 下面的代码曾经帮助我将帖子添加到用户新闻提要中 并附带所附照片的缩略图 在 object attachment 参数中引用 然而现在帖子已按预期创建 但缩略图为空 我正在使用的 photo id
  • python 类层次结构问题

    我有一个类层次结构 class ParentClass def do something self pass child classes have their own implementation of this class ChildCl
  • 将参数从 C++ 传递到 QML

    我想将一些参数从 C 传递到 QML 以便 QML 可以用它们做一些事情 有点像这样 void MyClass myCplusplusFunction int i int j emit mySignal i j 在 QML 中 每次mySi
  • Gradle 不会复制测试资源来构建

    我有一个多项目 gradle 项目 spring web 具有以下布局 springweb build gradle settings gradle services build gradle src main java src main
  • 如何在 PL/SQL 中对关联数组进行排序?

    我有一个像这样的关联数组 continent population Australia 30 continent population Antarctica 90 continent population UK 50 如何在 PL SQL