完成以下操作:
create type del_t_quest is object (v1 varchar2(1000), v2 varchar2(1000));
create table del_quest
(
id integer generated always as identity,
q del_t_quest
);
insert into del_quest
(q)
values
(del_t_quest('aaa','qqq'));
commit;
select id, (select * from table(w.q)) from del_quest w;
ORA-22905: 无法访问非嵌套表元素的行
如何在 SQL 查询中显示这些数据?错误的原因是什么?
错误的原因是
table(w.q)表达式中的表运算符将不是嵌套表的数据类型作为参数(请参阅 PS)。数据将被显示,以何种形式显示,完全取决于显示它的客户端。例如,在 SQL*Plus 中是这样的:
问题似乎是在询问如何访问使用对象数据类型声明的列的属性。
如关闭中所述。博士。B.6.1 对属性和方法的限定引用
仅在限定名称中指示表别名,即 所以:
table_alias.column_name.attribute:PS 问题中带有 ORA-22905 错误的请求可以这样重写:
解决该问题的另一种方法是避免指定关系表的列。
创建一个对象表TABLE OF(参见 object_table 语法图)。
然后表列将是对象类型的属性。
定义
print()将根据需要显示列的自定义函数。例如,像这样:
然后数据会这样显示: