【问题标题】:How to get column names from a query?如何从查询中获取列名?
【发布时间】:2019-05-02 09:17:58
【问题描述】:

我有一个包含连接和别名的特定查询,我需要在 Talend 中检索 REST 请求的列名。

我正在使用 Talend Open Studio for Data Integration 6.2,并且我有一个带有只读帐户的 Oracle 11g 数据库。我可以使用 Talend 执行脚本,例如查询:

select 
    u.name as "user", 
    f.name as "food", 
    e.rate 
from 
    Users as u 
    join Eval as e on u.user_id = e.user_id 
    join Food as f on e.food_id = f.food_id
where
    1 = 1

应该给出以下结果:

+------+--------+------+
| user | food   | rate |
+------+--------+------+
| Baba | Donuts | 16.0 |
| Baba | Cheese | 20.0 |
| Keke | Pasta  | 12.5 |
| Keke | Cheese | 15.0 |
+------+--------+------+

我尝试使用脚本或 Talend 获取列(按正确的顺序):

+--------+
| Column |
+--------+
| user   |
| food   |
| rate   |
+--------+

有没有办法查询 Oracle 数据库以获取列或使用 talend 检索它们?

更新

感谢 Marmite Bomber,已为 Oracle 方法识别出重复的 here。现在我们需要一个 Talend 方法来解决这个问题。

【问题讨论】:

  • 查看重复问题here的答案,您可以使用DBMS_SQLJDBC方法

标签: sql oracle oracle11g talend


【解决方案1】:

你可以在 tJavaRow 上尝试这个,跟随你的 DBInput 组件:

for (java.lang.reflect.Field field: row1.getClass().getDeclaredFields()) {
context.columnName = field.getName();
      System.out.println("Field name is " + context.columnName );      
           }

在 talend 帮助中心发现:https://community.talend.com/t5/Design-and-Development/resolved-how-to-get-the-column-names-in-a-data-flow/td-p/99172

您可以扩展它,并将列列表放在您的输出流中:

//add this inside the loop, and 'columnNames' as an output row in tJavaRow schema

             output_row.columnNames+=context.columnName+";";

在 tJavaRow 之后使用 tNormalize,您应该会得到预期的结果。

【讨论】:

  • 谢谢!它工作得很好,我还在 where 子句中添加了一个“rownum = 1”以提高性能:)
【解决方案2】:

这是一个甲骨文社区线程的链接,应该可以回答您的问题

community.oracle.com

【讨论】:

  • 如果我们想要一个表中的列但在我的查询中我有多个表并且我不想要所有表中的所有列,只需要选定的列,这很有用
【解决方案3】:

我无法写评论,所以将其发布为答案:

SELECT column_name
  FROM all_tab_cols
 WHERE table_name = 'table_name_here'

【讨论】:

  • 抱歉瑜伽,你的答案不正确。根据您的请求,您只能从定义的表中获取该列。使用您回答问题的方法,您应该根据请求创建一个临时表,然后选择列名称。问题是出于安全要求,我无法在数据库上写入。
猜你喜欢
  • 2020-10-24
  • 2013-08-20
  • 2019-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2011-06-27
  • 2021-09-27
相关资源
最近更新 更多