Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zapytanie krzyżowe Oracle SQL

Dla wyników generowanych dynamicznie potrzebujesz jakiegoś dynamicznego rozwiązania PLSQL, coś takiego jak ta procedura tworząca widok v_list_loc :

create or replace procedure p_list_loc is

  v_sql varchar2(32000) := '';

begin

  for c in (select distinct loc from test order by loc) loop
    v_sql := v_sql || '''' ||c.loc|| ''' '||c.loc||',';
  end loop;

  v_sql := 'create or replace view v_list_loc as '
    ||'select * from (select item, loc, stock from test) pivot (sum(stock) '
    ||'for (loc) in ('||rtrim(v_sql, ',')||'))';

  execute immediate v_sql;

end p_list_loc;

W kodzie procedury zastąp test z nazwą Twojego stołu. Skompiluj tę procedurę, uruchom i wybierz wyniki z wygenerowanego widoku v_list_loc :

SQL> exec p_list_loc;

PL/SQL procedure successfully completed

SQL> select * from v_list_loc;

ITEM         KS5        KS6
----- ---------- ----------
0001          10         30
0002          10         20

Za każdym razem, gdy nowe wartości w kolumnie loc wygląda na to, że musisz wykonać procedurę przed wybraniem z widoku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL/SQL:błąd liczbowy lub wartościowy:zbyt mały bufor ciągu znaków %ROWTYPE

  2. java.sql.SQLException:Wyjątek Io:Otrzymano minus jeden z wywołania odczytu podczas połączenia JDBC z Oracle

  3. Napisz zapytanie SQL, aby znaleźć uczniów, którzy są zapisani na jednostki oferowane w danej lokalizacji?

  4. Zainstaluj klienta bazy danych Oracle krok po kroku

  5. Wyzwalanie tylko dla zmienionych wartości