sql >> データベース >  >> RDS >> Oracle

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

    版画:

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


    1. データベースのテーブルから行を削除した場合、主キーの名前を変更する方法

    2. 次のページに選択されたフォームパス

    3. MariaDBで月と日の名前を別の言語で返す方法

    4. フィールドリストの不明な列。 PHP + Mysql