sql >> Database teknologi >  >> RDS >> Oracle

Hvilken datastruktur skal man bruge for at sortere disse data i PL/SQL?

Det er meget nemt, hvis du bruger PL/SQL som SQL og ikke kan lide andre sprog. Det er ret specifikt og nogle gange meget rart netop derfor.

Nogle gange hader jeg virkelig PL/SQL, men denne sag handler absolut om kærlighed.

Se, hvor nemt det er:

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;

Her kan du se problemet med, at du skal skabe globale typer, og det er det, jeg hader det for. Men de siger i Oracle 12 det kan gøres med lokalt definerede typer, så jeg venter på det :)

Outputtet er:

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

REDIGER

Så vidt du ikke kender antallet af iterationer fra begyndelsen, er den eneste måde at forlænge på hver iteration (dette er kun et eksempel på forlængelse):

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;

Jeg foretrækker den anden måde, fordi den er hurtigere (beregner ikke .last). på hver iteration).



  1. Hvordan binder jeg en INTERVAL-param med PDO?

  2. Hvilke kolonner giver generelt gode indekser?

  3. Sådan ændres indstillinger for SQL Developer til korrekt at genkende den aktuelle version af SDK

  4. Hvordan importerer man en mysql-dump, mens man omdøber nogle tabeller/kolonner og slet ikke importerer andre?