Oracle - select 语句别名一列和通配符以获取所有剩余列

Oracle - select statement alias one column and wildcard to get all remaining columns

SQL 的新手。如果这个问题是一个基本问题,请原谅。有没有办法让我在下面做到这一点

SELECT COLUMN1 as CUSTOM_NAME, <wildcard for remaining columns as is> from TABLE;

我只希望 COLUMN1 在最终结果中出现一次

无法用常规 SQL* 制作那种动态 SELECT list

这是一件好事。编程越动态,就越困难。即使是简单的 * 语法,虽然在许多情况下都很有用,但也会在生产代码中引起问题。 Oracle SQL 语法已经比大多数传统编程语言复杂,添加一点元语言来描述查询 return 可能是一场噩梦。

*嗯,您 可以 使用 Oracle data cartridge, or DBMS_XMLGEN, or a trick with the PIVOT clause 创建一些东西。但是这些解决方案中的每一个都将非常复杂,而且肯定不像键入列那么简单。

这与您所能达到的差不多。 将重要的列放在前面非常方便, 同时可以根据需要滚动到其他人。 COLUMN1 最终会在那里出现两次。

SELECT COLUMN1 as CUSTOM_NAME, 
       aliasName.*
FROM TABLE aliasName;

如果您有很多列,可能值得自动生成完整的列列表而不是依赖 * selector.

因此,分两步的方法是生成具有自定义前 N 列和其他列未指定顺序的列列表,然后在您的实际 select 语句中使用此生成的列表。

-- select comma separated column names from table with the first columns being in specified order
select
LISTAGG(column_name, ', ') WITHIN GROUP (
  ORDER BY decode(column_name,
                  'FIRST_COLUMN_NAME', 1,
                  'SECOND_COLUMN_NAME', 2) asc) "Columns"
from user_tab_columns
where table_name = 'TABLE_NAME';

TABLE_NAMEFIRST_COLUMN_NAMESECOND_COLUMN_NAME替换为您的真实姓名,根据需要调整显式列列表。

然后执行查询并使用结果,应该类似于

FIRST_COLUMN_NAME, SECOND_COLUMN_NAME, OTHER_COLUMN_NAMES

当然,这对于 5 列左右的开销来说是开销,但是如果您曾经 运行 进入具有 3 位数列的公司数据库,这可能会很有趣。