gpt4 book ai didi

oracle - Oracle 数据库中所有表中数字列的最大范围和最大值

转载 作者:行者123 更新时间:2023-12-01 15:02:22 25 4
gpt4 key购买 nike

我正在使用下面的查询来获取 Oracle 数据库中所有表的所有列的最大范围

    select OWNER,TABLE_NAME,COLUMN_NAME,DATA_PRECISION,(POWER(10,DATA_PRECISION) -1) 
from ALL_TAB_COLUMNS where OWNER = 'MASTER' and DATA_TYPE = 'NUMBER' and
DATA_PRECISION is NOT NULL order by TABLE_NAME ASC;


OWNER TABLE_NAME COLUMN_NAME DATA_PRECISION (POWER(10,DATA_PRECISION) -1)
MASTER TABLE_1 COL_1 7 9999999
MASTER TABLE_1 COL_5 7 9999999
MASTER TABLE_2 COL_3 10 9999999999

我正在尝试获取第 6 和第 7 列,它应该是该特定表中该列的最大值以及最大范围(即(POWER(10,DATA_PRECISION)-1))与表中实际最大值之间的差异.

例如:

OWNER    TABLE_NAME  COLUMN_NAME   DATA_PRECISION  (POWER(10,DATA_PRECISION) -1)   MAX_VALUE     DIFF
MASTER TABLE_1 COL_1 7 9999999 9994637 5362
MASTER TABLE_1 COL_5 7 9999999 9997637 2362
MASTER TABLE_2 COL_3 10 9999999999 8933999999 1066000000

如何实现?

我可以使用 TABLE_NAME 连接表吗?

打赌,这对很多人都有帮助。

最佳答案

最简单的方法是编写一个小函数,您可以像这样提供表名和列:

  CREATE OR REPLACE FUNCTION get_max_value (p_table_name VARCHAR2, p_column VARCHAR2) 
RETURN NUMBER IS
v_query VARCHAR2(1000);
v_max_value NUMBER;
BEGIN
v_query := 'SELECT MAX (' || p_column ||') FROM '
|| p_table_name ;
EXECUTE IMMEDIATE v_query
INTO v_max_value;
RETURN v_max_value;
END;

然后对上面的查询稍作修改:

 SELECT   owner,
table_name,
column_name,
data_precision,
(POWER(10,data_precision) -1) ,
get_max_value (owner || '.' || table_name, column_name) max_val
FROM all_tab_columns
WHERE 1 = 1
AND owner = 'MASTER'
AND data_type = 'NUMBER'
AND data_precision is NOT NULL
AND table_name NOT LIKE '%$%'
ORDER BY c.table_name ASC

请注意,根据表的数量和每个表中的行数,执行可能需要一段时间。

关于oracle - Oracle 数据库中所有表中数字列的最大范围和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34548221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com