我是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;
然后我使用那些"内置"得到我想要的陈述。有更简单的方法吗?
答案 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';