获取表中每列的聚合值

时间:2015-03-24 11:56:16

标签: sql oracle

我是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',' FDW',' D_CLAIM',' FIELD_CLAIM_OFFICE&# 39); 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

- 创建MIN和MAX值语句

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;

然后我使用那些"内置"得到我想要的陈述。有更简单的方法吗?

2 个答案:

答案 0 :(得分: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;

希望有所帮助

答案 1 :(得分:0)

Frank Ockenfuss提供的答案很有效。我还通过使用以下Oracle视图找到了我正在寻找的一些信息:

SELECT *

FROM ALL_TAB_COL_STATISTICS U

U.TABLE_NAME在哪里'MY_TABLE_NAME';