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

Struktur data apa yang digunakan untuk mengurutkan data ini dalam PL/SQL?

Sangat mudah jika Anda menggunakan PL/SQL sebagai SQL dan tidak seperti bahasa lain. Ini cukup spesifik dan terkadang sangat bagus karena itu.

Terkadang saya sangat membenci PL/SQL, tetapi kasus ini benar-benar tentang cinta.

Lihat betapa mudahnya:

create type it as object (
  iter          number,
  stringval     varchar2(100),
  intval        integer
);

create type t_it as table of it;

declare
  t       t_it := new t_it();
  tmp1    varchar2(32767);
  tmp2    varchar2(32767);
begin
  t.extend(4);
  t(1) := new it(1,'Oslo',40);
  t(2) := new it(2,'Berlin',74);
  t(3) := new it(3,'Rome',25);
  t(4) := new it(4,'Paris',10);

  select listagg(stringval,', ') within group (order by stringval),
         listagg(stringval,', ') within group (order by intval)
  into tmp1, tmp2
  from table(t);

  dbms_output.put_line(tmp1);
  dbms_output.put_line(tmp2);
end;
/

drop type t_it;
drop type it;

Di sini Anda dapat melihat masalah bahwa Anda harus membuat tipe global, dan inilah yang saya benci. Tetapi mereka mengatakan di Oracle 12 itu bisa dilakukan dengan tipe yang ditentukan secara lokal jadi saya menunggunya :)

Outputnya adalah:

Berlin, Oslo, Paris, Rome
Paris, Rome, Oslo, Berlin

EDIT

Sejauh Anda tidak tahu jumlah iterasi dari awal, satu-satunya cara adalah melakukan perluasan pada setiap iterasi (ini hanya contoh perluasan):

declare
  iterator       pls_integer := 1;
begin
  /* some type of loop*/ loop
    t.extend();

    -- one way to assign
    t(t.last) := new it(1,'Oslo',40);

    -- another way is to use some integer iterator
    t(iterator) := new it(1,'Oslo',40);

    iterator := iterator + 1;
  end loop;
end;

Saya lebih suka cara kedua karena lebih cepat (tidak menghitung .last pada setiap iterasi).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle PL/SQL:Bagaimana cara DEREF dari VARRAY REF?

  2. Tanggal bulat hingga interval 10 menit

  3. ORACLE APEX - Siapkan Tombol untuk mengisi bidang teks

  4. Tulis tampilan Oracle DB berdasarkan perbedaan cap waktu kolom yang berbeda

  5. Bagaimana menjalankan file batch dari dalam prosedur PL/SQL