gpt4 book ai didi

database - 如何从 Oracle View 中发现底层主(或唯一)键列

转载 作者:太空狗 更新时间:2023-10-30 01:54:23 24 4
gpt4 key购买 nike

我想知道我是否有可能发现 Oracle View 中涉及的所有表的底层主(或唯一)键列。这里有一个例子来说明我的意思:

CREATE TABLE t_a (
id number(7),
primary key(id)
);

CREATE VIEW v_a AS
SELECT * FROM t_a;

所以根据命名约定,我知道 v_a.id 实际上是底层 t_a 表的主键列。有什么方法可以通过使用系统 View (例如 SYS.ALL_CONSTRAINTSSYS.USER_CONSTRAINTS 等)正式发现此信息?

注意:

  • 约束在 View 上,而是在基础表上。
  • 我对键本身不感兴趣,但对 View 的列感兴趣。

最佳答案

您可以通过 user_dependencies View 找到该信息:

SQL> CREATE TABLE t_a
2 ( id number(7)
3 , primary key(id)
4 )
5 /

Table created.

SQL> CREATE VIEW v_a AS SELECT * FROM t_a
2 /

View created.

SQL> select c.constraint_name
2 from user_dependencies d
3 , all_constraints c
4 where d.name = 'V_A'
5 and d.referenced_type = 'TABLE'
6 and d.referenced_link_name is null
7 and d.referenced_owner = c.owner
8 and d.referenced_name = c.table_name
9 and c.constraint_type = 'P'
10 /

CONSTRAINT_NAME
------------------------------
SYS_C0051559

1 row selected.

问候,
罗布。

编辑:对于可能的 View 列名称,您可以使用此查询。请注意,无法保证您的 View 中存在此类列。

SQL> select c.constraint_name
2 , 'V_' || substr(c.table_name,3) || '.' || cc.column_name possible_view_column
3 from user_dependencies d
4 , all_constraints c
5 , all_cons_columns cc
6 where d.name = 'V_A'
7 and d.referenced_type = 'TABLE'
8 and d.referenced_link_name is null
9 and d.referenced_owner = c.owner
10 and d.referenced_name = c.table_name
11 and c.constraint_type = 'P'
12 and c.owner = cc.owner
13 and c.constraint_name = cc.constraint_name
14 /

CONSTRAINT_NAME POSSIBLE_VIEW_COLUMN
------------------------------ -------------------------------------------------------------
SYS_C0051561 V_A.ID

1 row selected.

关于database - 如何从 Oracle View 中发现底层主(或唯一)键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5500738/

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