Как получить имена столбцов из запроса?

У меня есть конкретный запрос с объединениями и псевдонимами, и мне нужно получить имя столбца для запроса REST в Talend.

Я использую 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. Теперь нам нужен Talend подход к проблеме.

См. ответ на повторяющийся вопрос здесь, вы можете использовать подход DBMS_SQL или JDBC.

Marmite Bomber 02.05.2019 20:04
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
1
628
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вот ссылка на ветку сообщества оракула, которая должна ответить на ваш вопрос

сообщество.oracle.com

Это полезно, если нам нужны столбцы из таблицы, но в моем запросе у меня есть несколько таблиц, и мне не нужны все столбцы из всех таблиц, а только выбранные.

Ceci Semble Absurde. 02.05.2019 11:26

Я не могу написать комментарий, поэтому публикую это как ответ:

SELECT column_name
  FROM all_tab_cols
 WHERE table_name = 'table_name_here'

Извините, йога, ваш ответ неверен. По вашему запросу вы можете получить столбец только из определенной таблицы. При вашем подходе к ответу на вопрос вы должны создать временную таблицу на основе запроса, а затем выбрать имена столбцов. Проблема в том, что я не могу писать в базу данных по требованиям безопасности.

Ceci Semble Absurde. 09.05.2019 09:36
Ответ принят как подходящий

Вы можете попробовать это на 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+";";

С tNormalize после tJavaRow вы получите ожидаемый результат.

Спасибо ! Он работает отлично, я также добавляю «rownum = 1» в предложение where для повышения производительности :)

Ceci Semble Absurde. 09.05.2019 10:48

Другие вопросы по теме