列名称和限定列名称之间有什么区别?

3
下面是对标准视图user_tab_col的查询:
select * from user_tab_cols;

在Oracle上返回列column_namequalified_col_name

两者有何不同?


我不确定我理解你的意思。你能否展示一下你的输出样本? - Sylvain Leroux
@SylvainLeroux 输入 describe user_tab_cols; - ceving
我错过了这个事实,这是一个“标准”表。 - Sylvain Leroux
1
相反,它是一个“视图”。 - Ravi.
1个回答

4

qualified_col_name 表示 XML 表的完整列路径。它基本上存储了该列的表达式。对于常规列,它将等于 column_name

如果您运行:

select owner, table_name, column_name, data_type, qualified_col_name
  from all_tab_cols
 where column_name <> qualified_col_name;

你将在XDB模式下看到来自XML表的返回列。
例如:
OWNER  TABLE_NAME       COLUMN_NAME   DATA_TYPE           QUALIFIED_COL_NAME
XDB    XDB$SIMPLE_TYPE  SYS_NC00074$  XDB$APPINFO_LIST_T  "XMLDATA"."RESTRICTION"."MIN_INCLUSIVE"."ANNOTATION"."APPINFO"

更新: 对于对象表,qualified_col_name 存储类型转换和属性访问的表达式。例如:
create or replace type test1_obj as object(
   n1 number,
   n2 number,
   s1 varchar2(10),
   s2 varchar2(20)
)
not final;

create or replace type test2_obj under test1_obj(
  d1 date,
  d2 date
)
not final;

create table object_table of test1_obj;

select column_name, data_type, qualified_col_name 
  from user_tab_cols
where table_name = 'OBJECT_TABLE'
 order by internal_column_id;

对于为类型test2_obj的实例保留的最后两个隐藏系统列,我们可以看到:

COLUMN_NAME     DATA_TYPE   QUALIFIED_COL_NAME
SYS_NC00010$    DATE        TREAT(SYS_NC_ROWINFO$ AS "TEST"."TEST2_OBJ")."D1"
SYS_NC00011$    DATE        TREAT(SYS_NC_ROWINFO$ AS "TEST"."TEST2_OBJ")."D2"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接