#sql #database #escaping #ingres
#sql #База данных #экранирование #ingres
Вопрос:
Я запрашиваю базу данных, которая использует Ingres 10.2. Кажется, я не могу заставить какой-либо из моих кодов сопоставления с шаблоном работать так, как я ожидаю.
Например:
SELECT TOP 20 *
FROM table_name
WHERE variable_name IN ('XaKDG', 'XaKDH')
возвращает оба XaKDG и XaKDH, как и ожидалось.
Однако при попытке этого:
SELECT TOP 5 *
FROM table_name
WHERE variable_name LIKE 'XaKD[GH]' escape ''
Я получаю следующие ошибки:
ОШИБКА ‘22025’ 1315172
Недопустимое совпадение шаблонов с указанной
недопустимой ESCAPE-последовательностью.
Я сбит с толку, поскольку в руководстве пользователя указано следующее:
«Для сопоставления любой строки, начинающейся с 0 по 4, за которой следует заглавная буква, затем [, любые два символа и конечный ]:»
name like '[01234][A-Z][__]' escape ''
Насколько я могу судить, мой запрос должен быть правильным. Я также пробовал вообще без escape-символов и с двойными escape-символами. Это не привело ни к каким ошибкам, но также ничего не вернуло.
Я ценю любую помощь.
Руководство пользователя здесь: https://supportactian.secure.force.com/help/servlet/fileField?id=0BEf3000000PLPf
Комментарии:
1. Ingres 10.2 — это СУБД, если я не неправильно понимаю значение этого термина
2. Согласно документации, можете ли вы убедиться, что ваша СУБД действительно поддерживает это ESCAPE-предложение? Я предполагаю, что это так, но это скорее проверка работоспособности. Смотрите:
The iidbcapabilities catalog contains information about the capabilities provided by the Enterprise Access product or Ingres DBMS. ... The cap_capability column in the iidbcapabilities catalog contains one or more of the following values: ESCAPE - Contains Y if DBMS supports the ESCAPE clause of the LIKE predicate in the WHERE clause of search statements. Contains N if ESCAPE is not supported.
Строка ниже, объясняющая, что такое escape-символ3. Спасибо, я не видел эту часть документации. Да, предложение escape поддерживается. # cap_capability cap_value 18 ESCAPE Y
4. Я не могу получить доступ к серверу СУБД 10.2 (срок поддержки 10.2 истек), но синтаксис правильный, я попробовал следующее в 11.1 и получил ожидаемый результат: объявить глобальную временную таблицу session.x(имя varchar(50)) при фиксации сохранить строки с помощью norecovery; вставить взначения session.x(‘XaKDG’),(‘XaKDH’),(‘ГГГГ’); выберите * из session.x, где имя типа ‘XaKD [GH]’ escape »;
5. Какой клиент вы используете? Не исключено, что клиент что-то делает с вашими escape-символами и выдает неожиданные результаты. Где, как если бы вы использовали терминал ingres, мы, вероятно, можем это исключить.