sql >> Database >  >> RDS >> Oracle

PL/SQL-procedure/functie om gegevens uit verschillende tabellen dynamisch samen met de kolomnamen in de eerste gegevensrij te tonen

Gebruik de datadictionary om een ​​SQL-instructie te maken die de juiste kolommen selecteert. Gebruik dynamische SQL om een ​​refcursor voor die instructie te openen en de cursor van de functie terug te sturen.

Voorbeeldschema

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;

Functie

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;
/

De functie aanroepen

De functie zou moeten werken zolang de toepassing refcursors begrijpt. Hieronder ziet u een voorbeeld in een recente versie van 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. welke query moeten we gebruiken om 1colmnn in meerdere kolommen te splitsen

  2. PHP mysql charset utf8 problemen

  3. Hoe een JDBC-toepassing te beschermen tegen SQL-injectie?

  4. Wordpress SQL:postcategorie en tags ophalen