2015-03-24 15 views
1

Я новичок в Oracle; Я хочу, чтобы иметь возможность генерировать отчет, который дает мне совокупные значения для каждого столбца таблицы. Я ничего, что делает это автоматически не нашел, так что я создал таблицу, где я загрузить имена столбцов, то я использую данные в этой таблице для создания отдельных операторов SQL:Получить совокупные значения каждой колонки в таблице

Вот мой стол:

CREATE TABLE CARIAS.TEST_CA_1 
    (
    DATA_BASE_NAME VARCHAR2(100 BYTE), 
     SCHEMA_NAME VARCHAR2(100 BYTE), 
     TABLE_NAME VARCHAR2(100 BYTE), 
     FIELD_NAME VARCHAR2(20 BYTE) 
    ); 

INSERT INTO TEST_CA_1 (DATA_BASE_NAME, SCHEMA_NAME, TABLE_NAME, FIELD_NAME) ЗНАЧЕНИЯ ('FDWP', 'ИДП', 'D_CLAIM', 'FIELD_CLAIM_OFFICE'); INSERT INTO TEST_CA_1 (DATA_BASE_NAME, SCHEMA_NAME, TABLE_NAME, FIELD_NAME) ЗНАЧЕНИЯ («FDWP», «FDW», «D_CLAIM», «CLAIM_SYMBOL_CODE»); INSERT INTO TEST_CA_1 (DATA_BASE_NAME, SCHEMA_NAME, TABLE_NAME, FIELD_NAME) ЗНАЧЕНИЯ («FDWP», «FDW», «D_CLAIM», «HANDLING_DIVISION»);

Вот запрос, который строит заявления:

SELECT 
FIELD_NAME, 
SQL_STATEMENT 
FROM  
(
--Creates Count Statements 

SELECT 'SELECT ' || FIELD_NAME ||', COUNT(*) AS CNT FROM ' || SCHEMA_NAME || '.' || TABLE_NAME ||' GROUP BY ' || FIELD_NAME || ';' AS SQL_STATEMENT, FIELD_NAME FROM TEST_CA_1  
UNION ALL 

--Creates Минимальное и максимальное значения Заявление

SELECT 'SELECT MIN(' || FIELD_NAME || ') AS MIN_VALUE, MAX(' || FIELD_NAME || ') AS MAX_VALUE FROM ' || SCHEMA_NAME || '.' || TABLE_NAME || ';' AS SQL_STATEMENT 
     ,FIELD_NAME 
FROM TEST_CA_1 

) 
ORDER BY FIELD_NAME; 

Затем я использую эти «встроенные» заявления, чтобы получить то, что я хочу. Есть ли более простой способ сделать это?

+0

Перспектива для обеспечения тестового случая, однако, является неполной. Пожалуйста, разместите некоторые вставки в качестве входных данных. Это будет полезно для человека, желающего ответить на ваш вопрос. Удачи! –

+0

Оператор INSERT, подобный этому, недействителен для Oracle. –

+0

Более простым способом было бы перейти к системным таблицам Oracle и запросить имена и типы базы данных, таблиц и столбцов для создания ваших инструкций. К сожалению, я могу сделать это только с помощью SQL Server - я ничего не знаю о системных таблицах в Oracle (иначе я бы опубликовал это как ответ). Я отправляю этот комментарий только для того, чтобы привести кого-то, кто знает, как добраться до системных таблиц Oracle. – Russ

ответ

0

Первый подход может быть таким:

create or replace function exec_on_table_field(i_table in varchar2, 
               i_field in varchar2, 
               i_function in varchar2) 
    return clob is 
    l_result clob; 
begin 
    execute immediate 'select to_clob(' || i_function || '(' || i_field || 
        ')) from ' || i_table 
    into l_result; 
    return l_result; 
end; 

вызов этой функции с

select u.TABLE_NAME, u.COLUMN_NAME, 
to_char(exec_on_table_field(u.TABLE_NAME, u.COLUMN_NAME, 'min')), 
to_char(exec_on_table_field(u.TABLE_NAME, u.COLUMN_NAME, 'max')) from 
user_tab_cols u where u.TABLE_NAME like 'PS_CS%' and rownum < 5; 

надеюсь, что это помогает

+0

Большое вам спасибо! –

0

Ответ предоставляется Франком Ockenfuss работал большой. Я также нашел некоторые из информации, которую я искал с помощью следующей Oracle View:

SELECT *

ОТ ALL_TAB_COL_STATISTICS U

ГДЕ U.TABLE_NAME LIKE 'MY_TABLE_NAME';

Смежные вопросы