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