Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara mengurutkan array asosiatif di PL/SQL?

Anda tidak dapat mengurutkan array asosiatif berdasarkan nilai, tetapi Anda harus mengonversi data ke beberapa struktur data lain dan membuat pengurutan di sana. Cara termudah adalah mengonversi ke larik asosiatif lain tempat kunci dan nilai bertukar tempat, tetapi itu mengharuskan nilai kunci Anda juga harus unik.

Di bawah ini adalah contoh yang disesuaikan dengan kasus Anda dari Mengurutkan Koleksi PL/SQL . Silakan periksa artikel itu untuk detailnya.

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

Cetakan:

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. Set Dari Satu Tabel, Dikelompokkan Berdasarkan Kolom

  2. Oracle menghasilkan baris jadwal dengan interval

  3. Mencoba membuat Daftar Nilai termasuk nilai tabel dan angka di bawahnya

  4. Tidak dapat membuat Oracle View mengakses objek skema lain, meskipun ada hibah

  5. Bagaimana menghubungkan database Oracle 11G menggunakan pengembang SQL dari komputer lain dalam koneksi LAN