我构建了一个函数,该函数应该返回指定表的每列中存储的最大值(不是允许的最大值,而是实际存在的数据)。单独运行代码会将结果作为服务器输出返回,当调用时,它只显示所有表的NULL。
功能:
CREATE OR REPLACE FUNCTION COL_MAX_LENGTH(table_name VARCHAR2, column_name VARCHAR2)
RETURN INTEGER
IS
v_ln INTEGER;
BEGIN
FOR r IN (
select table_name, column_name
from all_tab_cols
WHERE owner = '' --MY TABLE OWNER VALUE
AND table_name = '' --MY TABLE NAME VALUE
AND column_id IS NOT NULL
)
LOOP
EXECUTE IMMEDIATE 'select max(length('||r.column_name||')) from '||r.table_name into v_ln;
dbms_output.put_line('Table: '||r.table_name||', Column: '||r.column_name||', v_ln: '||v_ln);
END LOOP;
RETURN v_ln;
END;
查询调用功能:
SELECT COL_MAX_LENGTH(table_name,column_name)
FROM all_tab_cols ATC
尝试指定不同的数据类型,修改循环内外的所有参数,但都不起作用
1条答案
按热度按时间62o28rlo1#
功能代码错误。在函数中循环是无用的;查询(遍历所需表中的所有列)本身会“循环”。
因此,只需选择max length并返回它。
应该是这样的:
测试: