2013-12-04 2 views
4

Как я могу выполнить запрос к базе данных (с использованием tOracleInput), как Select и использовать строки, которые уже определены в качестве параметров других компонентов, например, в «tFlowToIterate»?Talend: База данных запросов со строками/Параметры уже определены

Например: "SELECT * from TABLE_X где FIELD_X =?;"

Мой '?' - переменная, которая поступает из моего компонента tFlowToIterate (foo). Я уже пробовал с (String) globalMap.get ("Foo") и другие подобные формы ...

Благодаря

[Talend Open Studio для интеграции данных v5.3.1; DB: Oracle]

+0

Шаг 3 йо ур обязанности? ;) Дайте мне 5 минут, чтобы лучше раскрыть ваши потребности –

+0

:) Я обнаружил, что «tMysqlRow» имеет таблицу PreparedStatement на вкладке «Дополнительные настройки». Это то, что мне нужно. Но я использую Oracle BD. – user2144555

+0

Я думаю, что могу использовать компонент 'tOracleRow', вместо этого 'tOracleInput' – user2144555

ответ

7

Вы ответили сами. tOracleInput компонент принимает запрос как параметр. Это очень скучная строка java, не более того, не меньше. Это означает, что если вы хотите использовать элемент globalMap внутри запроса, вам просто нужно выполнить конкатенацию java String. Нечто подобное:

"SELECT * from TABLE_X where FIELD_X='" + (String)globalMap.get("foo") + "'" 

но не работы (внимательно посмотрите на цитаты):

"SELECT * from TABLE_X where FIELD_X='(String)globalMap.get("foo")'" 

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

Как правило, я никогда не предлагаю использовать оператор «*» внутри входного компонента базы данных, например tOracleInput. Talend имеет структуру фиксированной схемы, которая создается во время компиляции. Это означает, что если однажды вы добавите столбец в TABLE_X, ваш ETL будет терпеть неудачу.

Более надежное решение заключается в следующем:

  1. Запишите свой запрос с оператора *
  2. Нажмите «Угадай схемы», чтобы восстановить схему таблицы и поместить в метаданных компонента
  3. Теперь нажмите «Угадайте запрос», чтобы переписать явно селекты
  4. Закрепить запрос (то есть., где условие, ...), если это необходимо
3

Вам просто нужно объединить его с переменной.

Так что в вашем случае это будет выглядеть так:

"SELECT * 
FROM TABLE_X 
WHERE FIELD_X = '" + (String)globalMap.get("foo") + "'" 
Смежные вопросы