【问题标题】:SELECT query leaving out a column in Oracle [duplicate]SELECT查询在Oracle中遗漏一列[重复]
【发布时间】:2014-01-07 07:49:55
【问题描述】:

我正在尝试在 Oracle 中选择一个表来编辑一列。这是我尝试过的查询,但 Oracle 不喜欢它。

SELECT (
    SELECT COLUMN_NAME
    FROM USER_TAB_COLS
    WHERE TABLE_NAME = 'LMNOP_USERS'
        AND COLUMN_NAME != 'USER_SECRET' )
FROM LMNOP_USERS;

仅供参考,子查询确实返回列名列表。除了列出所有列之外,还有其他方法可以编写此查询吗?

【问题讨论】:

  • 不,没有。列出所有列。
  • 正确。您不能在 Oracle(或任何其他数据库)中动态选择列。如果你真的想这样做,你需要将查询放入一个字符串并执行该字符串。

标签: sql oracle


【解决方案1】:

您可以运行查询:

SELECT COLUMN_NAME||', '
FROM USER_TAB_COLS
WHERE TABLE_NAME = 'LMNOP_USERS'
    AND COLUMN_NAME != 'USER_SECRET';

然后取出列列表并将它们放在select 之后。记得删除最后一个逗号。这样可以节省打字。

如果您愿意,可以使用listagg() 将所有列放在一行中。

【讨论】:

  • 不错。但对用户的附加说明::在Oracle 11g 中是listagg,在10g 中是wm_concat。此外,当连接的字符串长度超过 4000 个字符时,它也会失败。剩下的文本会被截断。
猜你喜欢
  • 2017-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 2023-02-25
  • 2022-12-14
  • 1970-01-01
相关资源
最近更新 更多