如何从查询中获取列名?

时间:2019-05-02 09:17:59

标签: sql oracle oracle11g talend

我有一个包含联接和别名的特定查询,我需要在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,已为here确定了Oracle方法的重复项。现在我们需要一个Talend方法来解决这个问题。

3 个答案:

答案 0 :(得分:1)

您可以在DBInput组件之后的tJavaRow上进行尝试:

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,您应该获得预期的结果。

答案 1 :(得分:0)

这是指向oracle社区线程的链接,该链接应回答您的问题

community.oracle.com

答案 2 :(得分:0)

我无法发表评论,因此将其发布为答案:

def checkos(longName) {
    if (longName.contains('Windows Server 2008')){ 
        return 'Windows Server 2008' } 
    else { return null }
}
checkos('Microsoft Windows Server 2008 R2 Enterprise')