识别并检索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值。
有更简单的方法吗?
编辑:示例数据
答案
您需要使用动态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 数据库中的 Varchar2 列