我有一个基于对象a_obj的表a:

CREATE TYPE a_obj IS OBJECT (
  a1 INTEGER,
  a2 integer
);

CREATE TABLE a OF a_obj (
  CONSTRAINT a__a1__pk PRIMARY KEY (a1)
);

有时我想 Select 一列:

select a.* from a  -- it works

有时我想 Select 对象a_obj.

 select a_obj(a.a1,a.a2) from a; --works

但我不想重写所有列的名称,因为我可以写很多列,很容易忘记一列.

我试着这样做:

select a_obj(a.*) from a;

ORA-01747:无效用户.桌子列,表.列或列规格

它不起作用.

有没有办法做到这一点?

这也行不通:

declare 
  ret a_obj;
begin
  select a.* into ret
  from a;
end;

code

推荐答案

使用OBJECT_VALUE pseudo-column:

SELECT OBJECT_VALUE FROM a;

或者,作为@padders commented,使用VALUE() function:

SELECT VALUE(a_alias) FROM a a_alias;

Which needs to reference a table alias and not the table identifier.

db<>fiddle 100

Sql相关问答推荐

基于模式或其他行集的数据复制

GROUP BY和GROUP_CONCAT用于计算比赛排名

如何通过比较不同表中相同ID S的值来筛选ID为S的列表?

SQL是否可以计算每年的所有日期变化?

在请求结束之前,PostgreSQL不会考虑使用中的删除

当一个视图在Postgres中失效时?

返回找到的最小和最大row_number()spark SQL

找到最新的连线

对表进行多项 Select 以返回最大值和时间

如何从Spark SQL的JSON列中提取动态数量的键值对

同一表的Oracle SQL更新(含YTD合计)

如何将不同层次的产品组和规格组合到最深一层?

无法访问级联删除导致的触发器中已删除的外键记录

对现有记录进行分组

我可以在 T-SQL (SQL Server) 的函数内使用 OPTION 子句吗?

如何从三个连接表中获取数据,并始终显示第一个表中的数据,以及第三个表中的空值或现有记录?

每组使用平均值来填补缺失值的SQL

每组跨行曲折?

Postgres 窗口函数未按预期工作

在 SQL 中将行显示为列