gpt4 book ai didi

oracle - 基于函数的索引和 user_tab_cols

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

为什么我们基于表的列创建函数时,会在user_tab_cols中创建一个条目?

 create table t1(a varchar2(100), b number);

select * from user_tab_cols where table_name = 'T1'; -- Two rows coming

create index idx1 on t1(upper(a));

select * from user_tab_cols where table_name = 'T1'; -- Three rows coming

将条目放入 user_tab_cols 的原因是什么?

最佳答案

额外的列是 virtual column Oracle 已添加以存储索引表达式的值。来自Oracle documentation :

Oracle Database represents the index expression as a virtual column

您可以在 SQL*Plus 中轻松验证额外的列是虚拟的。其实也是一个'隐藏'的列:

SQL> select column_name, hidden_column, virtual_column from user_tab_cols where table_name = 'T1';

COLUMN_NAME HID VIR
------------------------------ --- ---
A NO NO
B NO NO
SYS_NC00003$ YES YES

虚拟列的名称在您的机器上可能不同。

user_tab_columns 过滤掉隐藏的列,如 Oracle documentation for user_tab_cols 中所述.因此,如果您不想看到此列,您可以查询 user_tab_columns 而不是 user_tab_cols:

SQL> select column_name from user_tab_columns where table_name = 'T1';

COLUMN_NAME
------------------------------
A
B

SQL>

关于oracle - 基于函数的索引和 user_tab_cols,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21366969/

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