Вы можете создать динамическое представление (попросите вашего суперпользователя / dba создать его для вас, если у вас нет разрешения)
В этом примере я буду использовать несколько строк из схемы HR. Вы можете изменить его, добавив также имя схемы, используя all_tab_columns
DECLARE
v_sql CLOB := empty_clob();
BEGIN
for rec IN (select 'select '''||table_name||''' as tablename,
'''||column_name||''' as columname,
avg(' || column_name ||') as average,sum('
|| column_name || ') as "SUM" from '
|| table_name
||' ' as qry
FROM user_tab_columns --all_tab_columns
where data_type= 'NUMBER'
--and owner not in ('SYS','PUBLIC','WMSYS','SYSTEM')
AND column_name NOT IN ('BATCHNUM'
)
AND ROWNUM < 10
) LOOP v_sql := v_sql
|| rec.qry
|| ' UNION ALL ';
END LOOP;
v_sql := regexp_replace(v_sql,' UNION ALL $');
EXECUTE IMMEDIATE 'CREATE OR REPLACE view my_view as ' || v_sql;
END;
/
Теперь запросите представление.
SQL> set sqlformat ansiconsole
SQL> select * from my_view;
TABLENAME COLUMNAME AVERAGE SUM
REGIONS REGION_ID 2.5 10
COUNTRIES REGION_ID 2.4 60
LOCATIONS LOCATION_ID 2100 48300
DEPARTMENTS DEPARTMENT_ID 140 3780
DEPARTMENTS MANAGER_ID 154.909090909090909090909090909090909091 1704
DEPARTMENTS LOCATION_ID 1777.777777777777777777777777777777777778 48000
JOBS MIN_SALARY 6573.052631578947368421052631578947368421 124888
JOBS MAX_SALARY 13215.1578947368421052631578947368421053 251088
EMPLOYEES EMPLOYEE_ID 153 16371
Если вы используете Oracle 12c и выше, вы можете использовать DBMS_SQL.RETURN_RESULT
использовать тот же блок, что и выше, за исключением этих изменений.
DECLARE
..
v_cur SYS_REFCURSOR;
BEGIN
...
END LOOP;
v_sql := regexp_replace(v_sql,' UNION ALL $');
OPEN v_cur for v_sql;
DBMS_SQL.RETURN_RESULT(v_cur);
END;
/
ResultSet #1
TABLENAME COLUMNAME AVERAGE SUM
----------- ------------- ---------- ----------
REGIONS REGION_ID 2.5 10
COUNTRIES REGION_ID 2.4 60
LOCATIONS LOCATION_ID 2100 48300
DEPARTMENTS DEPARTMENT_ID 140 3780
DEPARTMENTS MANAGER_ID 154.909091 1704
DEPARTMENTS LOCATION_ID 1777.77778 48000
JOBS MIN_SALARY 6573.05263 124888
JOBS MAX_SALARY 13215.1579 251088
EMPLOYEES EMPLOYEE_ID 153 16371
9 rows selected.