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

Procedura/funkcja PL/SQL do dynamicznego wyświetlania danych z różnych tabel wraz z nazwami kolumn w pierwszym wierszu danych

Użyj słownika danych, aby zbudować instrukcję SQL, która wybiera właściwe kolumny. Użyj dynamicznego SQL, aby otworzyć refcursor do tej instrukcji i zwróć kursor z funkcji.

Przykładowy schemat

create table tab_1 as
select '00001' id, 'Q0' quarter, 2 risk from dual union all
select '00001' id, 'Q1' quarter, 3 risk from dual union all
select '00001' id, 'Q2' quarter, 1 risk from dual union all
select '00001' id, 'Q3' quarter, 1 risk from dual union all
select '00001' id, 'Q4' quarter, 2 risk from dual;

create table tab_2 as
select '00001' id, 'ACTIVE' status from dual union all
select '00002' id, 'PURGED' status from dual union all
select '00003' id, 'ACTIVE' status from dual union all
select '00004' id, 'ACTIVE' status from dual;

Funkcja

create or replace function get_results(p_id number) return sys_refcursor is
    v_sql varchar2(32767);
    v_refcursor sys_refcursor;
begin
    --Get SQL statement.
    select
        'select ' || 
        listagg(column_name, ',') within group (order by column_id) ||
        ' from ' || table_name
    into v_sql
    from user_tab_columns
    where table_name = 'TAB_' || p_id
        and column_id <= 2
    group by table_name;

    open v_refcursor for v_sql;

    return v_refcursor;
end;
/

Wywołanie funkcji

Funkcja powinna działać tak długo, jak aplikacja rozumie rekursory. Poniżej znajduje się przykład w najnowszej wersji SQL*Plus:

SQL> select get_results(1) from dual;

GET_RESULTS(1)
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

ID    QU
----- --
00001 Q0
00001 Q1
00001 Q2
00001 Q3
00001 Q4



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. OC4J 10.1.3.3 nie można znaleźć pliku ojms.rar podczas konfigurowania trwałości bazy danych

  2. Podzapytanie Oracle w słowie kluczowym jest wolne na 12c

  3. ORA-29024:Niepowodzenie weryfikacji certyfikatu

  4. CLOB vs. VARCHAR2 i czy są inne alternatywy?

  5. Zapisywanie UTL_FILE na komputerze lokalnym