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

Hvordan kan jeg returnere en CSV-streng fra PL/SQL-tabeltypen i Oracle

Uden at komme ind på spørgsmålet - hvorfor bruger du en tabeltype og ikke en tabel (eller midlertidig tabel), kan du gøre det sådan:

declare
  my_table varTableType;
  i varchar2(32767);
begin
  my_table := new
              varTableType('bbbb', 'ccca', 'ddda', 'eee', 'fffa', 'gggg');

  select trim(xmlagg(xmlelement(e, column_value || ','))
              .extract('//text()'))
    into i
    from table(my_table)
   where column_value like '%a';

  dbms_output.put_line(i);

end;

Der er flere måder at sammensætte rækker - WM_CONCAT (hvis aktiveret) eller LISTAGG (siden 11g R2), men den grundlæggende idé om

select column_value 
from table(my_table) 
where column_value like '%a';

forbliver

Der er en anden måde uden sql:

declare
  my_table varTableType;
  i varchar2(32767);
begin
  my_table := new
              varTableType('bbbb', 'ccca', 'ddda', 'eee', 'fffa', 'gggg');

  FOR j IN my_table.first .. my_table.last LOOP

     IF my_table(j) like '%a' THEN
        i := i || my_table(j);
     END IF;

  END LOOP;

  dbms_output.put_line(i);

end;


  1. MYSQL:Brug af GROUP BY med strenge bogstaver

  2. Kan ikke binde argument ved indeks 2, fordi indekset er uden for rækkevidde

  3. Sådan sletter du en MySQL-databasebruger i cPanel

  4. Dvale:Opret indeks