识别并检索Oracle数据库中所有varchar列的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了识别并检索Oracle数据库中所有varchar列的值相关的知识,希望对你有一定的参考价值。

我有以下查询,它为我提供了VARCHAR列的Oracle数据库中所有表和列的结果集:

SELECT ATC.OWNER, ATC.TABLE_NAME, ATC.COLUMN_NAME
FROM all_tab_columns ATC
WHERE DATA_TYPE LIKE '%VARCHAR%'

为此,我想添加第4列,显示ATC.COLUMN_NAME的值。有这么简单的方法吗?

我想到一个SQL语句的连接,它循环通过ATC.COLUMN_NAME并输出值。连接将在表名上完成。

我不知道我是否使它复杂化,我无法想到SQL。我已经尝试在变量中声明上面的语句,然后使用CTE来询问它,但我仍然需要遍历table_name和column_name值。

有更简单的方法吗?

编辑:示例数据

enter image description here

答案

您需要使用动态SQL。这是一个概念证明,它在针对大型数据库运行时不能很好地扩展。

declare
    stmt varchar2(32767);
    val varchar2(4000);
    rc sys_refcursor;
begin
    for r in ( SELECT ATC.OWNER, ATC.TABLE_NAME, ATC.COLUMN_NAME
               FROM all_tab_columns ATC
                WHERE DATA_TYPE LIKE '%VARCHAR%' )
    loop
        stmt := ' select distinct '|| r.column_name || 
                ' from '|| r.owner||'.'||r.table_name;
        open rc for stmt;
        loop
            fetch rc in val;
            exit when rc%notfound;
            dbms_output.put_line ( r.owner||'.'||r.table_name ||'.'|| r.column_name
                   ||': '|| val );
        end loop;
    end loop;
end;

以上是关于识别并检索Oracle数据库中所有varchar列的值的主要内容,如果未能解决你的问题,请参考以下文章

如何选择 oracle group 函数中的所有列?

SSIS 无法检索列 varchar(max) 的长数据

将时间戳插入 Oracle 数据库中的 Varchar2 列

Oracle中表列由VARCHAR2类型改成CLOB

Oracle:修改 varchar 列大小后重新创建数据库视图

从redshift sql中的varchar列检索数字范围输出