gpt4 book ai didi

sql - 查找包含特定表或列的所有 View

转载 作者:行者123 更新时间:2023-12-04 02:20:43 26 4
gpt4 key购买 nike

在遗留数据库基础架构中,如何最好地找到访问特定表或列的 View ?我目前正在重构某些表(即删除未使用的列),我想找到仍然依赖于这些列的所有 View ,如果我删除这些列,这些 View 将会中断。

是否有任何工具/功能可以搜索 Oracle SQL Developer 中的所有 View 定义?

最佳答案

您可以使用类似函数 dependent_views 的代码,代码如下。用法示例:

select dependent_views('CUSTOMER_NAME', 'CUSTOMERS') list from dual

Output:
LIST
-----------------
SCOTT.V_PERSONS

函数在 ALL_DEPENDENCIES 中搜索从属 View ,接下来在 ALL_VIEWS 中搜索 TEXT 列以查找 column_name 的出现。

注意:因为 all_dependences 可能不包含依赖对象的完整数据(例如,当 View 由立即执行创建时)- 我的函数可能找不到该对象。此外,如果 column_name 是其他列的子字符串 - 函数可能会返回到多个 View 。

create or replace function dependent_views
(i_column varchar2, i_table varchar2, i_owner varchar2 default USER)
return varchar2 is

o_ret varchar2(4000) := '';
v_text long := '';
begin
for o in (
select * from all_dependencies
where referenced_name = upper(i_table)
and referenced_owner = upper(i_owner)
and type = 'VIEW')
loop
begin
select text into v_text from all_views
where view_name = o.name and owner = o.owner;
exception when no_data_found then
null;
end;
if upper(v_text) like '%'||upper(i_column)||'%' then
o_ret := o_ret||o.owner||'.'||o.name||' ';
end if;
end loop;
return o_ret;
end dependent_views;

关于sql - 查找包含特定表或列的所有 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30120408/

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