【问题标题】:How to remove collection type name from results如何从结果中删除集合类型名称
【发布时间】:2021-11-07 10:44:15
【问题描述】:

当我运行这个查询时

create type type_4 as table of varchar2(20) ;

SELECT
    department_id,
    CAST(COLLECT(first_name) AS type_4) names
FROM employees 
GROUP BY department_id;

我得到低于结果

我的问题是如何从结果中删除 "HR.TYPE_4",因为它无关紧要,而且

为什么它 (HR.TYPE_4) 会出现在结果集中,因为我只是给出了一个简单的选择。

【问题讨论】:

  • 集合的显示方式取决于您使用的工具。例如,在 PL/SQL Developer 中,结果网格显示带有可单击框的“”,因此这不是 PL/SQL 或 SQL 问题。

标签: sql oracle plsql oracle19c


【解决方案1】:

为什么它的 (HR.TYPE_4) 会出现在结果集中,因为我只是给出一个简单的选择。

因为您将名称收集到嵌套表集合中。您使用的用户界面有助于显示所有相关信息,包括集合的数据类型和集合中的值。

您可能觉得它没有帮助,但您使用的任何用户界面的开发人员认为这是向用户显示集合的最有用的方式。您可以调查是否可以在用户界面上设置任何首选项以更改其显示方式,或者您可以查看其他格式化数据的方法。


如果您只想要一个名称列表,那么您不需要集合,可以使用LISTAGG 获取单个格式化字符串:

SELECT department_id,
       LISTAGG(first_name, ',') WITHIN GROUP (ORDER BY first_name) AS names
FROM   employees 
GROUP BY department_id;

【讨论】:

  • @MTO 您是说如果我将选定的列放入子句中,“HR.TYPE_4”就不会出现在变量中?
  • @Erik 不,不是这样。无论您使用什么工具,都以这种方式显示集合。其他工具以不同方式显示它们,例如PL/SQL Developer 将显示“”,旁边有一个按钮,在新窗口中显示值。 MTO 的建议是使用listagg 函数来创建一个逗号分隔的列表而不是一个集合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 2020-07-02
相关资源
最近更新 更多