Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để sắp xếp một mảng kết hợp trong PL / SQL?

Bạn không thể sắp xếp một mảng kết hợp theo các giá trị, nhưng bạn phải chuyển đổi dữ liệu sang một số cấu trúc dữ liệu khác và thực hiện sắp xếp ở đó. Cách dễ nhất là chuyển đổi sang một mảng kết hợp khác trong đó các khóa và giá trị hoán đổi vị trí cho nhau, nhưng điều đó yêu cầu các giá trị khóa của bạn cũng phải là duy nhất.

Dưới đây là một ví dụ phù hợp với trường hợp của bạn từ Sắp xếp các tập hợp PL / SQL . Vui lòng kiểm tra bài viết đó để biết chi tiết.

/* 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;
/

Bản in:

Unsorted:
Antarctica = 90
Australia = 30
UK = 50
USA = 50
Sorted by value:
Australia = 30
UK = 50
USA = 50
Antarctica = 90


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao cần THỰC HIỆN NGAY LẬP TỨC ở đây?

  2. Truy vấn SQL của Oracle - tạo bản ghi giữa hai ngày

  3. Lỗi giá trị hoặc số trong một hàm và tôi không thể phát hiện ra mình đã sai ở đâu Oracle

  4. java.sql.SQLException:ORA-00904

  5. ORA-02267:loại cột không tương thích với loại cột được tham chiếu