oracle – generic min max avg select statement

to check value of larger tables this procedure creates a sql-string to get all min/max/avg values of the given table

to-do: all column-data-types are used in this version.

DECLARE 


    v_sql VARCHAR2(1000);


    v_table_name VARCHAR2(100);
    v_column_count NUMBER(3);
    v_column_name VARCHAR2(50);
    v_von NUMBER(3);


BEGIN


    v_table_name := ‚MY_TABLE‘;
    
    v_sql := ‚SELECT ‚;
    v_von := 1;


    — get number of columns in the table
    SELECT COUNT(*) INTO v_column_count FROM all_tab_columns WHERE table_name = v_table_name; 


    WHILE v_von <= v_column_count LOOP


        — get current column name
        SELECT COLUMN_NAME INTO v_column_name 
        FROM all_tab_columns 
        WHERE 
            COLUMN_ID = v_von 
            AND table_name = v_table_name

            AND DATA_TYPE IN (‚DATE‘, ‚FLOAT‘, ‚LONG‘, ‚NUMBER‘)

        ; 


        v_sql := v_sql || ‚MIN(‚ || v_column_name || ‚), ‚;
        v_sql := v_sql || ‚MAX(‚ || v_column_name || ‚), ‚;
        v_sql := v_sql || ‚AVG(‚ || v_column_name || ‚), ‚;


        v_von := v_von + 1;


    END LOOP;
    
    — delete the last comma 
    v_sql := SUBSTR(v_sql,1,LENGTH(v_sql) – 2);


    v_sql := v_sql || ‚ FROM ‚ || v_table_name;
    dbms_output.put_line(‚v_sql: ‚ || v_sql);
END;

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s