PL / SQL如何在不使用循环的情况下更改集合元素

时间:2019-06-12 12:24:08

标签: sql oracle plsql

我想在不使用任何循环的情况下更改集合的元素索引。我该怎么办?

declare
   type NumberList is table of pls_integer;
   nlist NumberList := NumberList(1,2,3,4,5,6,7,8,9,10);
   n_first pls_integer := 1;
   n_last pls_integer := 10;

我想使nlist(10,9,8,7,6,5,4,3,2,1)。预先感谢。

2 个答案:

答案 0 :(得分:1)

您可以对选择中的元素进行排序,然后将结果收集到新列表中

VK_PIPELINE_STAGE_TRANSFER_BIT

您的嵌套表应声明为全局类型

  select * bulk collect into nlist2 from (
    select column_value from table(nlist) order by 1 desc
  );

比您可以使用的

CREATE or replace TYPE NumberList  IS TABLE OF pls_integer;

答案 1 :(得分:0)

嵌套表未排序,因此实际上您的请求没有多大意义。

如果您希望按特定顺序获取元素,请使用

select column_value from table(nlist) order by 1 desc

请注意,您可以将此类数组存储在表中,但是当再次选择这些元素时,元素的顺序可以是任意的,请参见Nested Tables

  

在数据库中,嵌套表是一种列类型,用于存储   未指定的行数,没有特定的顺序。

     

当您从数据库中将嵌套表值检索到PL / SQL中时   嵌套表格变量,PL / SQL为行提供连续索引,   从1开始。使用这些索引,您可以访问各个行   嵌套表变量。语法为variable_name(index)。的   嵌套表的索引和行顺序可能会随着您   从数据库存储和检索嵌套表。