【问题标题】:Oracle - How to write Query to return column header name with pipe delimited?Oracle - 如何编写查询以返回带有管道分隔的列标题名称?
【发布时间】:2017-03-26 00:11:30
【问题描述】:

我想要一个查询返回带有管道分隔的标题名称。我在网上找到了一些参考资料,但无法得到我想要的。

我想要这样的返回,不需要输出文件,只需要一个查询结果:

column1|column2|column3|column4|.......|columnN

我试过这个:SELECT /delimited/ from tableName where rownum

"UPC","UPC_DESCRIPTION","ITEM_CODE","DEPT_CODE"

但结果以逗号分隔并带有引号。 --我不想要。

事实上我有这么多列,有没有一种简单的方法/简单的查询来返回所有标题(管道分隔)而无需手动输入每个?

感谢您的帮助!!

【问题讨论】:

  • 您可以使用set sqlformat delimited | 而不是在查询中包含提示(至少在 SQL Developer/SQLcl 的最新版本中)。唉,如果包含双引号括起来,似乎没有任何方法可以停止 - 即使等效的导出设置确实如此。您可以更改它们,但不能完全删除它们。

标签: oracle header pipe delimited


【解决方案1】:

你不能这样做:

select col1 || '|' || col2 || '|' || col3 || '|' || col4 || '|' || col5
  from table;

您可以生成您的查询:

select 'select ' || LISTAGG(column_name , ' || ''|'' || ') within group (order by column_id) || ' from my_table' 
  from user_tab_columns 
  where table_name = 'MY_TABLE';

如果您只想获取数据的标题,请执行以下操作:

select LISTAGG(column_name, '|') within group (order by column_id)
      from user_tab_columns 
      where table_name = 'MY_TABLE';

【讨论】:

  • 其实我有这么多列,有没有一种简单的方法可以返回所有标题而无需手动输入每个标题?
  • @JerryLi 我已经向您发布了查询,它将生成包含所有列的查询。
  • @JerryLi 我已经添加了您还可以查询以生成标题行以备不时之需。
  • 谢谢,您发布的第二个查询完全符合我的要求。
  • LISTAGG() 中,大多数情况下可能希望列按照它们在表中出现的顺序出现,而不是按照列名的字母顺序。这可以轻松完成 - 在 ORDER BY 中,按 COLUMN_ID(而不是 COLUMN_NAME)排序。
猜你喜欢
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多