WMB ESQL передает константы в passthru

Я работаю над IBM Websphere Message Broker v6.0 и пишу поток сообщений на ESQL. Я использую passthru для запуска запроса на выборку в базе данных.

Теперь проблема в том, что passthru использует 'для запуска и завершения строки параметров. И мы используем 'в SQL для обозначения констант - что-то вроде WHERE T1.col1 = 'Y'. Поэтому, когда я использую 'в параметре passthru, он рассматривает его как конец строки.

Вот код ESQL:

SET result1 = passthru ('select CASE WHEN T2.X_FLG = 'Y' AND (SELECT D2.RGN FROM V1.X AS D2
WHERE D2.DLR = V.DLR AND (D2.RGN = '500' OR D2.RGN = '600')) FROM V1
<left join all the tabels>');

Теперь проблема в том, что строка параметра passthru оканчивается первым: перед Y - запросом выбора параметра для базы данных. Компилятор ESQL выдает ошибку компилятора, говоря, что это синтаксическая ошибка.

Есть ли какой-нибудь персонаж, который должен быть добавлен перед тем, чтобы "распознать его как характер", а не как конец строки для прохождения? Что-то вроде \'или /'? Я пробовал все это, но ничего не работает.

4 ответа

Решение

Догадаться! Есть еще один пункт (я должен сказать), который позволяет нам передавать константные значения в оператор SQL и записывается после завершения запроса SQL. Где нам нужны постоянные значения? и это отмечает места для вставки. Вставка происходит в том порядке, в котором мы помещаем постоянные значения в тег "values". Итак, вышеуказанный промежуточный запрос можно записать так:

SET result1 = passthru ('select CASE WHEN T2.X_FLG = ? AND (SELECT D2.RGN FROM V1.X AS D2
WHERE D2.DLR = V.DLR AND (D2.RGN = ? OR D2.RGN = ?)) FROM V1
<left join all the tables>' to Database.{datasource_name} values('Y','500','600');

Помнишь? не должны быть заключены в скобки.

Вы можете написать как

passthru('select CASE WHEN T2.X_FLG = ?', 'Y')

Ты симплай поставил ? и разделенные запятыми значения после запроса соответственно.

SET result1 = passthru ('select CASE WHEN T2.X_FLG = ''Y'' AND (SELECT D2.RGN FROM V1.X AS D2 WHERE D2.DLR = V.DLR AND (D2.RGN = ''500'' OR D2.RGN = ''600'')) FROM V1 <left join all the tabels>');

Я имею в виду, что использовать двойные одинарные кавычки (''string value'') это будет рассматриваться как значение, а не как завершение запроса. Надеюсь, это сработает.

И, пожалуйста, будьте осторожны, это не двойные кавычки, а двойная кавычка

Попробуйте установить это так

passthru ('select CASE WHEN T2.X_FLG = '||VariableName||'

VariableName со значением Y

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